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