Unity常用API,unity中文api參考手冊Unity常用API1、Event Function:事件函數(shù)Reset():被附加腳本時、在游戲物體的組件上按Reset時會觸發(fā)該事件函數(shù)Start():在游戲初始化時會執(zhí)行一次Update():每一幀都會運行這個方法FixedUpdate():會在指定幀調(diào)用該方法多......
1、Event Function:事件函數(shù)
Reset():被附加腳本時、在游戲物體的組件上按Reset時會觸發(fā)該事件函數(shù)
Start():在游戲初始化時會執(zhí)行一次
Update():每一幀都會運行這個方法
FixedUpdate():會在指定幀調(diào)用該方法多少次
LateUpdate():晚于Update的運行順序,但是FPS和Update是一樣的
Awake()Start():都是在游戲物體初始化運行一次,但是Awake的運行順序高于Start的,并且只要腳本中存在Awake方法,則無論是否掛載了該腳本都會執(zhí)行該方法
OnEnable():當(dāng)將物體的SetActive設(shè)置為true時就會自動調(diào)用調(diào)用該方法
OnDestory():當(dāng)關(guān)閉游戲則會調(diào)用該方法
2、Time時間類函數(shù):
Time.time表示從游戲開發(fā)到現(xiàn)在的時間,會隨著游戲的暫停而停止計算。
Time.timeSinceLevelLoad表示從當(dāng)前Scene開始到目前為止的時間,也會隨著暫停操作而停止。
Time.deltaTime表示從上一幀到當(dāng)前幀時間,以秒為單位。【一般用來控制角色、動畫的運動】
Time.fixedTime表示以秒計游戲開始的時間,固定時間以定期間隔更新(相當(dāng)于fixedDeltaTime)直到達(dá)到time屬性。
Time.fixedDeltaTime表示以秒計間隔,在物理和其他固定幀率進(jìn)行更新,在Editgt;ProjectSettingsgt;Time的Fixed Timestep可以自行設(shè)置。
Time.SmoothDeltaTime表示一個平穩(wěn)的deltaTime,根據(jù)前N幀的時間加權(quán)平均的值。
Time.timeScale時間縮放,默認(rèn)值為1,若設(shè)置lt;1,表示時間減慢,若設(shè)置gt;1,表示時間加快,可以用來加速和減速游戲,回放等、非常有用。如果游戲中控制運動的都是使用了Time.deltatime的話,則可以通過設(shè)置Time.timeScale=0來暫停其運動等。
Time.frameCount總幀數(shù)
Time.realtimeSinceStartup表示自游戲開始后的總時間,即使暫停也會不斷的增加。【一般用作性能測試】
Time.captureFramerate表示設(shè)置每秒的幀率,然后不考慮真實時間。
Time.unscaledDeltaTime以秒計算,完成最后一幀的時間不考慮timescale時候與deltaTime相同,若timescale被設(shè)置,則無效。
Time.unscaledTime從游戲開始到現(xiàn)在所用的時間不考慮timescale時候與time相同,若timescale被設(shè)置,則無效。
3、GameObject類:
【1】、創(chuàng)建游戲物體的三種方法:
通過其構(gòu)造器來創(chuàng)建GameObject go=new GameObejct(游戲物體名);//一般是用來創(chuàng)建空的游戲來存放其他東西的。
Instantiate GameObject.Instantiate(prefab)//根據(jù)Prefab或者是另外一個游戲物體來創(chuàng)建(克隆Colon),可以實例粒子、等其他的游戲物體,很是常用的
CreattePrimitive GameObject.CreatePrimitive(PrimitiveType.**)//創(chuàng)建原始的游戲物體,基本的幾何體
【2】、為游戲物體添加組件,其中組件可以是我們自己自定義的腳本GameObject.AddComponentlt;組件名gt;
【3】、屬性、變量:
GameObject.activeInHierarchy游戲物體是否處于激活狀態(tài),與父類有關(guān),父類被取消激活,則子類也是取消激活的
GameObject.activeSelf自身的激活狀態(tài),與父類無關(guān),只與自身有關(guān)?!究刂平M件的激活與取消激活則使用.enable=false/true】
GameObject.tag游戲物體的tag標(biāo)簽,具體的由程序員自定義設(shè)置
GameObject.SetActive(false/true)通過參數(shù)的控制來設(shè)置其游戲物體的激活狀態(tài),true為激活狀態(tài),反之為取消激活狀態(tài)。
【4】、UnityEngine.Object中的共有方法與變量
name:名字,調(diào)用該變量,則無論是通過GameObject還是Component都是返回游戲物體的名字
Destroy():刪除游戲物體,但是不會立馬在unity中刪除,而是會先進(jìn)行回收,等確定沒對象使用的時候,在進(jìn)行刪除
DontDestroyOnLoad():當(dāng)加載新的場景的時候,不刪除這個場景中的某個游戲物體
FindObjectTypelt;gt;
FindObjectsTypelt;gt;:t通過類型來進(jìn)行查找,是進(jìn)行全局的查找,則就是在整個場景中進(jìn)行查找
FindGameObjectWithTag:如果查到的是多個,則只返回查找到的第一個
FindGameObejctsWithTag返回查找到的游戲物體集合
【5】、消息的發(fā)快遞
BroadcastMessage()廣播發(fā)快遞消息,則該物體上對應(yīng)的方法會被調(diào)用,同時這個游戲物體上的子物體上對應(yīng)的方法也會被調(diào)用的
SendMessage()發(fā)快遞消息,只會對這個游戲物體中腳本上的方法發(fā)快遞消息
SendMessageUpwards()廣播發(fā)快遞消息,但是和BroadcastMessage()是相反的,在調(diào)用自身的方法時也會向上傳遞,調(diào)用其父類的方法
【6】、游戲組件的查找
Cube cube=target.GetComponentlt;Cubegt;();返回一個對應(yīng)的組件,如果有多個,則只返回第一個
Cube[]cc=target.GetComponentslt;Cubegt;();返回該游戲物體上所有符合條件的組件,返回一個組件數(shù)組
Cube[]xx=target.GetComponentsInChildrenlt;Cubegt;();返回該游戲物體上的對應(yīng)組件,同時返回該游戲物體的子類上對應(yīng)的組件
Cube[]yy=target.GetComponentsInParentlt;Cubegt;();返回該游戲物體上的對應(yīng)組件,同時返回該游戲物體的父類上對應(yīng)的組件
4、MonoBehaviours的類:
【1】、繼承的變量成員
enabled:返回該組件是否被激活或者是被禁用,可以通過該變量來進(jìn)行設(shè)置
isActiveAndEnabled:只能返回該組件是否激活的標(biāo)志位,不能設(shè)置該變量,為只讀的
tag:該組件所對應(yīng)的游戲物體的標(biāo)簽
name:該組件所對應(yīng)的游戲物體的名字
【2】、Invoke等方法、變量:將添加要調(diào)用的方法添加到等待隊列中,然后等待用戶設(shè)定的時間后,進(jìn)行隊列中的方法調(diào)用。
Invoke(方法1,float time):在等待time的時間后調(diào)用方法1
bool i=IsInvoking(方法1)返回bool值,如果方法被添加到隊列中,但沒有被運行則返回true,如果經(jīng)過一段時間后該方法被調(diào)用了則會返回false;
InvokeRepeating(方法1,time,number):等待time時間后,會重復(fù)開始運行方法1,每秒鐘運行number次。
CancelInvoke()會暫停通過Involve/InvokeRepeating的運行,但是一般來說CancelInvoke會和InvokeRepeating組合調(diào)用。參數(shù)由自己設(shè)定
擴(kuò)充:在腳本的類前添加[ExecuteInEditMode]:則該腳本不用按游戲運行按鈕就會開始編譯,只限在編輯模式里面
在腳本的共有變量前添加[HideInInspector]:則該共有變量不會在Inspector面板進(jìn)行顯示
5、Coroutines:協(xié)程:
1、定義協(xié)程:IEnumerator方法名()
{
yield return 0/null;
yield return new WaitForSeconds(1.0f);//等待一定時間在運行下面的代碼
}
2、開啟協(xié)程:StartCoroutines(方法名());
說明:協(xié)程開啟會繼續(xù)執(zhí)行下面代碼,不會等協(xié)程方法運行完再執(zhí)行接下來的方法
3、開啟與關(guān)閉協(xié)程時,StartCoriutine(參數(shù))、StopCoroutine(參數(shù))其中的參數(shù)要互相對應(yīng),如果傳遞的是方法名,則兩個方法中的參數(shù)就要是方法名,如果是IEnumerator的返回值,則其中兩個方法發(fā)的參數(shù)就要是IEnumerator的返回值
1、private IEnumerator coroutine;
coroutine=WaitAndPrint();
StartCoroutine(coroutine);
StopCoroutine(coroutine);
2、StartCoroutine(WaitAndPrint);
StopCoroutine(WaitAndPrint);
4、StopAllCoroutines()停止所有的協(xié)程,不管你是怎么調(diào)用的
6、OnMousexx鼠標(biāo)觸發(fā)事件:如果是通過Collider進(jìn)行觸發(fā)檢測的話,則要在設(shè)置中打開允許進(jìn)行射線檢測。
OnMouseDown():當(dāng)鼠標(biāo)按下的時候觸發(fā),按一次觸發(fā)一次
OnMouseDrag():當(dāng)鼠標(biāo)按住不放的時候一直觸發(fā),是每一幀進(jìn)行觸發(fā)
OnMouseUp():當(dāng)鼠標(biāo)抬起的時候觸發(fā),只執(zhí)行一次
OnMouseEnter():當(dāng)鼠標(biāo)進(jìn)入的時候觸發(fā),進(jìn)入一次觸發(fā)一次
OnMousetOver():當(dāng)鼠標(biāo)在觸發(fā)物體的上面時,則一直觸發(fā)
OnMouseExit():當(dāng)鼠標(biāo)移出的時候觸發(fā)
OnMouseUpAsButton()相當(dāng)于是按鈕的功能,當(dāng)鼠標(biāo)在同一個游戲物體上按下抬起的時候才會觸發(fā),按下與抬起不在同一個游戲上的話則不會進(jìn)行觸發(fā)。
7、Mathf類:所有的成員均為靜態(tài)的
Mathf.Abs()返回絕對值的
Mathf.Ceil()向上取整的,10.1gt;11
Mathf.Clamp(value,min,max)如果value的值在minmax之間的話就返回value,但是如果value的值小于min,則返回min,如果value的值大于max,則返回max,一般是用在控制角色血量,當(dāng)玩家的血量減少的時候,不會出現(xiàn)出現(xiàn)低于0和大于100的情況hp=Mathf.Clamp(hp,0,100);
Mathf.ClosePowerOfTwo(value):取得離value的2次方最近的值
Mathg.DeltaAngke:取得兩個角度之間的最小夾角
Mathf.Floor向下取整
Mathf.Pow(i,j)取得i的j次方
Mathf.MoveToWards()一般用來做移動控制,是勻速的運動,加速度固定的
Mathf.Lerp()差值運算,一般是用來控制動畫、運動,越往后運行的越慢的。
Mathf.PingPong(t,maxValue)類似乒乓球的來回運動,起始值是0,通過t變量來控制值由0向maxValue移動,當(dāng)t大于maxValue的時候又向0進(jìn)行移動,然后就這樣的來回往復(fù)運動,一般t變量用時間Time.deltatime來進(jìn)行控制的。
8、Input輸入類:
GetKey()按鍵一直按著時觸發(fā)
GetKeyDown按鍵被按下那一刻進(jìn)行觸發(fā)
GetKeyUp按鍵被按下后抬起時觸發(fā)
GetMouseButton(0/1/2)1:左鍵2:右鍵3:中鍵鼠標(biāo)一直按著時觸發(fā)
GetMouseButtonDown()鼠標(biāo)按下那一刻觸發(fā)、
GetMouseButtonUp()鼠標(biāo)抬起的那一刻時觸發(fā)
GetButtonDown()
GetButton()
GetButtonUp()這三個的參數(shù)是用戶自定義的虛擬按鍵進(jìn)行觸發(fā),其他的和上面的一樣
GetAxis(虛擬軸名)通過按下的虛擬軸來返回~1之間的值,開始值是0,然后向/1進(jìn)行漸漸的變化,有一定的加速度。一般用來控制運動的,比如是賽車的加速運動等
GetAxisRaw()其他的和GetAxis差不多,就是少了漸變效果,返回值只有0 1三個
anyKeyDown當(dāng)任何按鍵被按下(包括鼠標(biāo)按鍵)時返回true
anyKey當(dāng)任何按鍵被按著(包括鼠標(biāo))時返回true
mousePosition返回鼠標(biāo)在屏幕上的像素坐標(biāo),【屏幕坐標(biāo)】z軸衡為0的
9、Vector2;二維向量
magnitude:返回向量的長度
normalized;返回這個向量長度為1的矢量,不管這個向量多長,也是返回1的矢量,只是返回值,不對原向量的值產(chǎn)生影響
Normalize()無參數(shù)的,也是向量化,但是調(diào)用該方法會改變原向量值,使其的值被向量化了
ClampMagnitude();將一個向量限制在參數(shù)中指定的長度之間
MoveToWards()用來做勻速的運動,由一個位置向另一個位置進(jìn)行移動
sqrMagnitude對求向量的的長度時不進(jìn)行開平方根運算了,減少性能的損耗,一般是用來比較兩個向量的長度大小的。
其他的參考API文檔即可,較為簡單。
擴(kuò)充:向量是結(jié)構(gòu)體,為值類型,修改其中的變量的時候要整體進(jìn)行修改,不能單獨的進(jìn)行單個變量的賦值修改
10、Vector3:三維變量
Cross()插乘運算【左手法則】,通過兩個向量來獲得另一個向量的方向,然后進(jìn)行相關(guān)的判斷
Project()投影運算
Reflect()反射運算
Slerp()按照角度進(jìn)行插值,與lerp的按照位置信息進(jìn)行插值的,一般用在炮臺的旋轉(zhuǎn),使旋轉(zhuǎn)的更加平滑
11、Random隨機(jī)數(shù)類:
InitState():通過參數(shù)指定的種子,然后再調(diào)用Range()產(chǎn)生隨機(jī)數(shù)的時候會依據(jù)種子來進(jìn)行生成,則每一次運行所生成的隨機(jī)數(shù)都是一樣的,是偽隨機(jī)數(shù)。一般要生成的隨機(jī)數(shù)不同,可以設(shè)置參數(shù)為System.DataTime.Now.Ticks:通過時間戳來完成
insideUnitFCircle:在單位為1的園內(nèi)隨機(jī)生成一個位置信息,如果要在更大的圓中生成,則可以在后面*圓的半徑信息。一般用來控制隨機(jī)生成敵人的位置信息
insideUnitSphere:在單位為1的球內(nèi)隨機(jī)生成一個位置信息,如果要在更大的球中生成,則可以在后面*圓的半徑信息。
12、四元數(shù)Quaternion:
歐拉角【eylarAngles】與面板中的值對應(yīng)和四元數(shù)【rotation】之間是可以進(jìn)行轉(zhuǎn)換的,一般歐拉角是用來讓用戶可以直觀的看到的,而四元數(shù)是用來控制內(nèi)部的運算的。
.eulerAngles將四元數(shù)轉(zhuǎn)變?yōu)闅W拉角
Euler()將歐拉角轉(zhuǎn)變?yōu)樗脑獢?shù)
.LookRotation()讓玩家通過設(shè)置四元數(shù)來進(jìn)行望向敵人的旋轉(zhuǎn),將向量方向轉(zhuǎn)變?yōu)樗脑獢?shù)
Vector3 temp=enemy.positionplayer.position;//獲得兩個位置信息之間的變量,是主角望向敵人,所以要設(shè)置向量的方向是指向敵人的
enemp.y=0;//如果不想主角在望向他的時候出現(xiàn)低頭的情況,也就是y軸的值出現(xiàn)了變化了。
player.rotation=Quaternion.LookRotation(temp);
slerp()在做朝向的旋轉(zhuǎn)的時候,不建議使用lerp,而是建議使用slerp,使其的旋轉(zhuǎn)朝向更為平滑,更加的自然
Quaternion target=Quaternion.LookRotation(temp);
player.rotation=Quaternion.Slerp(player.rotation,target,Time.deltaTime);//插值的緩慢旋轉(zhuǎn)
13、Rigidbody:剛體組件,控制角色的移動
.position:可以通過剛體來控制運動,在控制運動方面,使用rigibody.positon比transform.porition計算要快的多,相關(guān)的物理計算也是在剛體中計算好了,但是不建議使用這個方法來持續(xù)的控制物體的運動,不平滑,控制一兩次的時候還可以使用
MovePosition()對position的優(yōu)化,其中利用了插值運算,一般持續(xù)運動的則使用這個方法,不出現(xiàn)卡頓的現(xiàn)象
,rotation:
MoveRotation用來控制剛體的旋轉(zhuǎn)的,一般不建議使用rotation,比較耗性能,建議使用MoveRotation(),然后配合Quaternion,slerp()進(jìn)行使用,使其更加的平滑
AddForce()為剛體添加力,一般可以用在賽車游戲中,當(dāng)進(jìn)行短時的加速則可以給以限定時間的AddForce方法
14、Camera;相機(jī)組件:
當(dāng)相機(jī)的標(biāo)簽是main cream時,可以通過Camer.main來進(jìn)行主相機(jī)cream組件的查找射線,用來檢測鼠標(biāo)在屏幕上的位置信息,以及觸碰到什么
Ray ray=cameraMain.ScreenPointToRay(Input.mousePosition);//獲得相機(jī)到鼠標(biāo)之間的射線
RaycastHit hit;//用來存放射線檢測到的游戲物體的信息的
bool temp=Physics.Raycast(ray,out hit);//進(jìn)行射線檢測
15、Application
SreeamingAcsets:該文件下的資源不會被壓縮,導(dǎo)入是什么類型還是什么類型,【主要是音頻、視頻資源】
dataPath:工程文件路徑
streamingAssetsPath:可以通過文件流來進(jìn)行讀取的文件路徑
persistenDataPath:可以實例的文件路徑
tempporaryCachePath:臨時的文件路徑
Application.OpenURL()打開指定的網(wǎng)址
Application.Quit()退出游戲的運行
.CapturScreenshot(游戲截圖)用來截圖的,字符串為截圖fileName
Application.identifier標(biāo)識名
.companyName公司名
productName產(chǎn)品名
instalMode安裝包名
isEditor是否在編輯器模式
isFocused是否在焦點
isMoliePlatform是否是移動平臺
isPlaying
isWebPlayer
platform編輯器的平臺
unityVersion unity版本號
version項目文件版本號
runInBackground是否可以在后臺運行
UnityEditor.EditorApplication.isPlaying=false;//在編輯器模式下推出編輯狀態(tài)
16、SceneManager場景類
SceneManager.LoadScene()加載下一個場景,一般是用在另一個場景不是太大的情況下
SceneManager.LoadSceneAsync()異步加載下一個場景,返回AsyncOperation類型,里面包含了加載的信息,加載的進(jìn)度條等等??梢宰層脩艟徑獾却虞d場景的時間
sceneCount獲得當(dāng)前加載的場景個數(shù)
sceneCountInBuildSettings在Build面板中加載的場景個數(shù)
GetActiveScene()獲取已經(jīng)加載的當(dāng)前場景的信息
GetSceneAt(index)加載index索引的場景
當(dāng)加載新的場景的時候會觸發(fā)下面的事件:
activeSceneChanged當(dāng)有新場景被加載的時候就會調(diào)用這個事件
sceneLoaded當(dāng)有新場景加載完成的時候就會觸發(fā)這個事件
擴(kuò)充:事件的注冊時通過加方法來進(jìn)行注冊的:
SceneManger.activeSceneChanged+=OnAcitiveScenenChanged;
17、射線檢測:一般射線檢測要在射線檢測的范圍內(nèi),并且被檢測物體要有Collider
Ray ray=new Ray(起點,方向);
PaycastHit hit;//hit中存放的是射線檢測的碰撞信息
bool temp=Physics.Raycast(ray,out hit);//具體的重載方法邊用邊查
Ray ray=new Ray(this.transform.position+transform.forward,transform.forward);//創(chuàng)建射線
RaycastHit hit;//存儲射線檢測到的游戲物體信息
if(Physics.Raycast(ray,out hit))//通過返回值來判斷射線是否檢測到相關(guān)的物體了
{
Debug.Log(hit.collider.gameObject.name);
}
擴(kuò)充:
Raycast;檢測的是射線碰撞到的第一個物體,不具有穿透性
RaycastAll:返回的是RaycastHit數(shù)組,具有穿透性,可以返回檢測到的多個游戲物體
18、代碼監(jiān)聽觸發(fā)事件:
lt;Buttongt;().onClick.AddListener(方法名);//當(dāng)觸發(fā)button組件,則會觸發(fā)指定的方法名的方法
通過實現(xiàn)接口來注冊監(jiān)聽事件:using UnityEgine.EventSystems;導(dǎo)入命名空間
IPointerDownHandler鼠標(biāo)按下的事件,具體的接口參考手冊
Raycast Target:如果取消勾選則不做事件監(jiān)聽了,則無法實現(xiàn)檢測了
19、www類,下載是用來在網(wǎng)絡(luò)中下載資源的,
public string url=http://img.taopic.com/uploads/allimg/120727/20199520HG1030762.jpg;
IEnumerator Start()
{
WWW www=new WWW(url);
yield return www;
Renderer renderer=this.GetComponentlt;Renderergt;();
renderer.material.mainTexture=www.texture;
}
20、Touches觸摸事件:
Input.touches:返回放在屏幕上的手指信息,返回數(shù)組
Touch touch1=Input.touches[0];
touch1.position;
TouchPhase pahse=touch1.phase phase是用來返回手指的狀態(tài)的
21、Debug.DrawRay(ray.oridin,ray.direction)繪制射線,第一個參數(shù)是原點,第二個是方向
22、CharacterController角色控制器
.SimpleMove(【vector3】)簡單移動
.isGrounded判斷是否到地面上,bool值
.Move()與simpleMove的區(qū)別是要*Time.deltatime、而且simpleMove會使用自帶的重力
OnCOntrollerColliderHit(ControllerCollidrHit hit)當(dāng)有碰撞到其他的碰撞器的時候會觸發(fā)這個事件函數(shù)【hit保存碰撞到的物體信息】
23、Mesh的設(shè)置:
material mesh指定人是什么樣子的,material指定人的膚色是什么樣子的
24、API變更:
棄用:Application.LoadLevel();
新的:SceneManager.LoadScene();加載新的場景
棄用
新的:Scene scene=SceneManager.GetActiveScene();//獲得當(dāng)前活動場景的信息
SceneManger.LoadScene(scene.buildIndex)//重新加載當(dāng)前場景
OnLevelWasLoaded()當(dāng)場景被加載的時候調(diào)用,被棄用了
改成事件了:sceenLoaded
特別聲明:以上文章內(nèi)容僅代表作者本人觀點,不代表ESG跨境電商觀點或立場。如有關(guān)于作品內(nèi)容、版權(quán)或其它問題請于作品發(fā)表后的30日內(nèi)與ESG跨境電商聯(lián)系。
二維碼加載中...
使用微信掃一掃登錄
使用賬號密碼登錄
平臺顧問
微信掃一掃
馬上聯(lián)系在線顧問
小程序
ESG跨境小程序
手機(jī)入駐更便捷
返回頂部