1. 程式人生 > >Unity遊戲開發常用的一些函式用法

Unity遊戲開發常用的一些函式用法

Unity遊戲開發常用函式

本文提供全流程,中文翻譯。

Chinar 堅持將簡單的生活方式,帶給世人!

(擁有更好的閱讀體驗 —— 高解析度使用者請根據需求調整網頁縮放比例)
Chinar —— 心分享、心創新!

助理快速瞭解 Unity 開發中常用的一些基礎函式

為新手節省寶貴的時間,避免採坑!

Chinar 教程效果:

1

RotateAround —— 圍繞某個點/物件旋轉



transform.RotateAround() —— 該函式多個過載

根據形參的不同,可使當前物件,繞某個遊戲物件旋轉 / 某個點

舉個栗子黑白88

using UnityEngine;


///
<summary>
/// 指令碼掛載物體上,即可繞目標物體 CylinderTransform 進行旋轉 /// </summary> public class ChinarRotate : MonoBehaviour { public Transform TargetTransform; //目標座標 public float Anglespeed = 5; //旋轉角度 void Update() { //transform.RotateAround(Vector3.zero, new Vector3(0, 1, 0), 3f);//圍繞零點、某個軸旋轉——(點座標,軸,速度)
transform.RotateAround(TargetTransform.position, TargetTransform.up, Anglespeed); //圍繞物體旋轉(目標物體,軸,速度) } }

Chinar 效果:
這裡寫圖片描述

2

LoadScene —— 載入場景



scenemanagement —— 場景管理器

SceneManager —— 場景管理

LoadScene —— 載入場景

.GetActiveScene() —— 獲取啟用的場景

buildIndex —— 場景對應下標

舉個栗子黑白88

using UnityEngine;
using
UnityEngine.SceneManagement;//引用名稱空間 /// <summary> /// 測試指令碼 /// </summary> public class Test : MonoBehaviour { void Start() { SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex); //過載當前場景 } }

3

Gizmos —— 小物件

注意:圖片必須是在 Gizmos 資料夾下,需要在程式碼中“檔名.格式”寫出格式

OnDrawGizmos() —— 函式,是 MonoBehaviour 的生命週期函式 ,只在編輯狀態下,每幀都會執行

Gizmos.DrawIcon —— 在場景中某個位置繪製一張圖片

Gizmos.DrawCube —— 在場景中某個位置繪製一個Cube

Debug.DrawLine —— 畫一條線,這個方法也可在正常編譯程式碼時列印用

舉個栗子黑白88

/// <summary>
/// 編輯器模式工作,每幀都會執行
/// </summary>
void OnDrawGizmos()
{
    Gizmos.DrawCube(transform.position, new Vector3(1, 1, 1));              //在Scene視窗下繪製一個Cube (位置,縮放比例)

    Gizmos.DrawIcon(transform.position, "Icon.png", true);                  //在Scene視窗下繪製一個圖片(位置,名稱.格式 ,是否允許擴充套件)

    Debug.DrawLine(transform.position, new Vector3(0, 10, 0), Color.green); //劃線(開始位置,方向,顏色)
}

這裡寫圖片描述

4

Normalize —— 向量

Vector3.Distance(transform.position,RightPos.position)>MaxDis

三維向量.距離(當前位置,目標位置) > 最大距離

舉個栗子黑白88

if (Vector3.Distance(transform.position,RightPos.position)>MaxDis)//如果大於設定距離MaxDis
{
    Vector3 pos = (transform.position - RightPos.position).normalized;//單位化向量,求得方向
    pos *= MaxDis;//給 pos 賦值,乘等於MaxDis
    transform.position = pos + RightPos.position;//當前位置賦值:最大距離+起點座標點的位置
}

5

RelativeVelocity —— 相對速度

collision.relativeVelocity.magnitude > MaxSpeed

碰撞物體的.相對速度.大小 > 最大速度

舉個栗子黑白88

/// <summary>
/// 觸發檢測
/// </summary>
/// <param name="collision"></param>
private void OnCollisionEnter2D(Collision2D collision)
{
    if (collision.relativeVelocity.magnitude > MaxSpeed) //如果相對速度.大小>最大速度
    {
        Destroy(gameObject); //直接死亡
    }
    else if (collision.relativeVelocity.magnitude > MinSpeed && collision.relativeVelocity.magnitude < MaxSpeed) //相對速度在4-8之間
    {
        Render.sprite = HurtSprite; //更換圖片,受傷
    }
}

6

AudioSource —— 音訊源

AudioSource.PlayClipAtPoint(clip, transform.position);

音訊源.在指定位置播放裁剪音效(音效,位置)

舉個栗子黑白88

public  AudioClip      HurtClip;    //受傷音效


void Start()
{
    AudioPlay(HurtClip);//播放受傷音效
}


/// <summary>
/// 播放音效
/// </summary>
/// <param name="clip"></param>
public void AudioPlay(AudioClip clip)
{
    AudioSource.PlayClipAtPoint(clip, transform.position); //靜態方法:播放音效
}

7

CameraFollow —— 相機跟隨,插值

Mathf.Clamp(posX, 0, 18)

數學函式.範圍(限定目標,0,到 18之間)

舉個栗子黑白88


/// <summary>
/// 相機在指定範圍跟隨
/// </summary>
private void CameraFollow()
{
    //記錄Eva的橫座標
    float posX = transform.position.x;

    //相機當前位置 = 插值(當前相機位置,目標位置(Mathf.Clamp-限定範圍:(限定posX,018之間))
    Camera.main.transform.position = Vector3.Lerp(Camera.main.transform.position, new Vector3(Mathf.Clamp(posX, 0, 18), Camera.main.transform.position.y, Camera.main.transform.position.z), SmoothFlo * Time.deltaTime);

}

8

String Split —— 字串分割


例如一堆物體名字分別為:
Test-1
Test-2
Test-3
Test-4
Test-5

Split(‘-‘)函式:返回值為一個String陣列

用-拆分,輸出的值為: 對應陣列中:
String[0]:對應Test
String[1]:對應1,2,3,4,5

舉個栗子黑白88

SkinnedMeshRenderer[] parts = sourceTransform.GetComponentsInChildren<SkinnedMeshRenderer>(); //獲取所有帶有siki的物體位置資訊,存入parts
foreach (var part in parts)//遍歷蒙皮網格陣列中的每一個元素
{
    string[] nameStrings = part.name.Split('-'); //記錄名字,用-拆分,輸出的值為:    “Test-1”----對應陣列中------0:"Test"   1:"1"
    if (!data.ContainsKey(nameStrings[0]))       //如果字典GirlData中不包含 第一個資源預設下的子物體的名字
    {
        GameObject partObj       = new GameObject(); //例項化一個空物體
        partObj.name             = nameStrings[0];   //給物體改名
        partObj.transform.parent = target.transform; //設定父物體

        mydic.Add(nameStrings[0], partObj.AddComponent<SkinnedMeshRenderer>());  //把骨骼target身上的骨骼資訊存起來
        data.Add(nameStrings[0], new Dictionary<string, SkinnedMeshRenderer>()); //存到字典中
    }

    data[nameStrings[0]].Add(nameStrings[1], part); //儲存所有的skin資訊到字典
}

9

Toggle/Button|AddListener —— Toggle/按鈕新增監聽

需要引用名稱空間:using UnityEngine.UI;

舉個栗子黑白88

private Toggle MyToggle;//自身的Toggle元件


/// <summary>
/// 初始化方法
/// </summary>
void Start()
{
    if (gameObject.name == "SaveButton") //如果按鈕名為:SaveButton
    {
        Button but = GetComponent<Button>();
        but.onClick.AddListener(LoadScene); //給當前物體上的Button元件新增監聽事件
        return;                             //不在向下執行
    }

    MyToggle = GetComponent<Toggle>();
    MyToggle.onValueChanged.AddListener(OnValueChangePerson); //繫結Toggle事件
    //MyToggle.onValueChanged.AddListener((bool value) => OnValueChangePerson(value)); //lambda表示式轉換為委託型別                                                            
}


/// <summary>
/// Toggle方法,改變
/// </summary>
/// <param name="isChange"></param>
public void OnValueChangePerson(bool isChange)
{
    if (isChange)
    {
        Debug.Log("開關狀態 " + (isChange ? "On" : "Off"));
    }
}


/// <summary>
/// 載入其他場景
/// </summary>
public void LoadScene()
{
    SceneManager.LoadScene(1);
}

支援

May Be —— 搞開發,總有一天要做的事!

擁有自己的伺服器,無需再找攻略!

Chinar 提供一站式教程,閉眼式建立!

為新手節省寶貴時間,避免採坑!



技術交流群:806091680 ! Chinar 歡迎你的加入
END

本部落格為非營利性個人原創,除部分有明確署名的作品外,所刊登的所有作品的著作權均為本人所擁有,本人保留所有法定權利。違者必究

對於需要複製、轉載、連結和傳播部落格文章或內容的,請及時和本博主進行聯絡,留言,Email: [email protected]

對於經本博主明確授權和許可使用文章及內容的,使用時請註明文章或內容出處並註明網址

相關推薦

Unity遊戲開發常用一些函式用法

Unity遊戲開發常用函式 本文提供全流程,中文翻譯。 Chinar 堅持將簡單的生活方式,帶給世人!(擁有更好的閱讀體驗 —— 高解析度使用者請根據需求調整網頁縮放比例) Chi

Unity遊戲開發】淺談Unity遊戲開發中的單元測試

可靠 屬於 sin 自定義類型 允許 ogr 兩個 階段 ast 一、單元測試的定義與作用   單元測試定義:單元測試在傳統軟件開發中是非常重要的工具,它是指對軟件中的最小可測試單元進行檢查和驗證,一般情況下就是對代碼中的一個函數去進行驗證,檢查它的正確性。一個單元測試是

Unity遊戲開發之“屏幕截圖”

texture apt 項目 一個 art error topn details camera2 下面是我總結的、在u3d中的,三種截屏方法:1、使用Application類下的CaptureScreenshot方法。void CaptureScreen() { Ap

Unity遊戲開發】AssetBundle雜記--AssetBundle的二三事

比較 streaming 指定 但是 chunk 加載 公司 prefab 方法 一、簡介   馬三在公司大部分時間做的都是遊戲業務邏輯和編輯器工具等相關工作,因此對Unity AssetBundle這塊的知識點並不是很熟悉,自己也是有打算想了解並熟悉一下AssetBun

劉國柱- Unity遊戲開發深度學習 系列課程福利大放送

Unity課程送書 Unity套餐課程 Unity遊戲深度學習 Unity最新書籍贈送 Unity專題課程 劉國柱--Unity遊戲開發深度學習 系列課程福利大發送!不單優惠, 還送Unity最新版本必備實戰書籍! HI, 各位熱心的Unity愛好者與學員,《Unity3D/2D 遊戲開

Unity遊戲開發】tolua之wrap文件的原理與使用

nop 微信 attr hiera n) 接下來 system 作者 prim   本文內容轉載自:https://www.cnblogs.com/blueberryzzz/p/9672342.html 。非常感謝原作者慷慨地授權轉載,比心!@blueberryzzz

Unity遊戲開發】tolua之wrap檔案的原理與使用

    本文內容轉載自:https://www.cnblogs.com/blueberryzzz/p/9672342.html 。非常感謝原作者慷慨地授權轉載,比心!@blueberryzzz 是位大神,歡迎大家關注他的部落格。馬三對原文的排版與結構做了微調,以便更合適閱讀。

Unity遊戲開發圖片紋理壓縮方案

原連結:https://blog.csdn.net/goodai007/article/details/52679333 Unity3D引擎對紋理的處理是智慧的:不論你放入的是PNG,PSD還是TGA,它們都會被自動轉換成Unity自己的Texture2D格式。 在Texture2D的設定選

unity遊戲開發之ULua框架介紹(二)

1.SimpleFramework框架配置檔案 (1)AppConst 檔案    在AppConst.cs檔案中配置了很多專案開發過程中,需要使用到的“公共常量資訊”。指令碼內的常量都有中文備註。所在位置是:Scripts/ConstDefine/AppConst.cs

unity遊戲開發之ULua框架介紹(一)

1.基礎介紹 ①ULua 整合開發環境叫做:SimpleFramework,SimpleFramework 分為NGUI 和UGUI兩個版本,區別是NGUI 版本的框架資源中含有NGUI 這個外掛。SimpleFramework 本身不是Unitypackage 格式,而是一個Unity3D的專

2019版unity遊戲開發學習路線

Unity類似於Director,Blender game engine, Virtools 或 Torque Game Builder等,利用互動的圖型化開發環境為首要方式的軟體其編輯器執行Windows 和Mac OS X下,可釋出遊戲至Windows、Mac、Wii、iPhone、Windows pho

Unity遊戲開發之控制相機跟隨主角

using System.Collections; using System.Collections.Generic; using UnityEngine; public class FollowTarget : MonoBehaviour {          priva

Unity遊戲開發】用C#和Lua實現Unity中的事件分發機制EventDispatcher

一、簡介   最近馬三換了一家大公司工作,公司制度規範了一些,因此平時的業餘時間多了不少。但是人卻懶了下來,最近這一個月都沒怎麼研究新技術,部落格寫得也是拖拖拉拉,週六周天就躺屍在家看帖子、看小說,要麼就是吃雞,唉!真是罪過罪過。希望能從這篇部落格開始有些改善吧,儘量少玩耍

前端開發常用函式

實用的函式集合總結 基本型別的判斷 在專案例項中,難免要做一些容錯處理或者是對例項的型別判斷,那麼就可以把這部分的判斷整理成公共的js檔案,供全域性使用。 利用object.prototype.toString.call可以判斷物件的型別 變數的兩種型別值:1、基本型別:String,Number,B

Unity遊戲開發筆記:獲取主角周圍的怪物

1、獲取距離主角最近的一個怪物 方法一:球形射線檢測,Physics.OverlapSphere 用球形射線檢測主角周圍方圓X米的怪物,如果檢測到怪物,即可返回此怪物,如果沒有檢測到怪物,將檢測範圍(即半徑)擴大,直到檢測到怪物為止。 public Transform OnG

unity遊戲開發入門-聲音控制遊戲

聲音控制遊戲中人物的移動,關鍵在於聲音的傳入,這裡關機鍵在於使用了Microphone 怎麼使用呢?下面給一段我編寫的聲音傳入的程式碼:(關鍵處已被標識) using System.Collections; using System.Collections.Ge

Re:Unity遊戲開發有哪些讓你拍案叫絕的技巧?

這是我在知乎一個問題: 《Unity遊戲開發有哪些讓你拍案叫絕的技巧?》 下面的回答,覺得蠻有趣的,貼在這裡和部落格的朋友們分享下。 ----- 分享一個比較好玩的內容吧。 大家都知道Unity有一個職位叫做Evangelist,翻譯成中文就是佈道師。他們的任務是介紹Unity最新的功能,分享U

unity遊戲開發 Excel表格生成class類

加班,閒來無事 吹一波。。。 吹啊吹啊 我的驕傲放縱。。。 五毛錢的來了(良心商家,不漲價)   其實呢,表格生成class類 就是一個編輯器,比如:策劃給你了好多excel表,而你肯定要把表對應一個個的class類。這個時候手動寫那豈不是很難受,有失我高階程式設計師的尊嚴

Unity遊戲開發教程:飛機大戰(一)

Unity版本:Unity 2018.2.14f1 新建專案 File -> New project -> 輸入Project name -> Preate project 匯入飛

Unity遊戲開發官方入門教程:飛機大戰(四)——加入背景

1.隱藏Player,將其單選框去掉 2.在Hierarchy中右鍵->3D Object->Quad 3.重新命名為Background 4.重置Transform 這時候什麼