其中腳本可以用三種語言撰寫C# and Boo 和 UnityScript
using UnityEngine;
using System.Collections;
public class MainPlayer : MonoBehaviour {
public string myName;
// Use this for initialization
void Start () {
Debug.Log("I am alive and my name is " + myName);
}
// Update is called once per frame
void Update () {
}
}
這是C# 的簡單範例,Boo(我不知道這是甚麼)好像形式也類似,都要自行引用UnityEngine等,還要宣告類別去繼承MonoBehaviour
另外一種是UnityScript,會自動完成繼承和引用,相比之下就精簡很多
#pragma strict
var myName: String ;
function Start () {
Debug.Log("I am alive and my name is " + myName);
}
function Update () {
}
UnityScript在語法上其實跟JavaScript一模一樣,連檔案格式都是JS,但是因為多了很多Unity自己增加的類別和新功能,所以其實之前就覺得要說是JavaScript又怪怪的,又是因為寫文章查官網才發現原來他們自己也稱呼成UnityScript
關於腳本怎麼用,還是建議找會的人親自教最快,其次就是看圖文並茂的書或官網(http://docs.unity3d.com/Manual/ScriptingConcepts.html),這邊就不多解釋了
一樣只講比較心得和自己之前沒注意的地方
就是update系列function的應用 (如果還沒用過腳本,但還是想先了解,請點上方連結)
update function基本上都會根據硬體和需求有一個自己的更新頻率,並在遊戲期間不斷被執行
因此例如code
遊戲執行時就會不斷執行transform.Translate(Vector3(0, 0, 1) * Time.deltaTime)使物件持續前進
關於腳本怎麼用,還是建議找會的人親自教最快,其次就是看圖文並茂的書或官網(http://docs.unity3d.com/Manual/ScriptingConcepts.html),這邊就不多解釋了
一樣只講比較心得和自己之前沒注意的地方
就是update系列function的應用 (如果還沒用過腳本,但還是想先了解,請點上方連結)
update function基本上都會根據硬體和需求有一個自己的更新頻率,並在遊戲期間不斷被執行
因此例如code
function Update () {
transform.Translate(Vector3(0, 0, 1) * Time.deltaTime);
}
這裡就可以解釋Time.deltaTime了,如上面所說,update有自己的更新頻率,並且這種更新頻率其實對於遊戲環境硬體或資源不同時,更新頻率並不會永遠一致
(假設Translate(Vector3(0, 0, 1)代表走一步,FPS30的環境一秒會有三十步,FPS60的環境一秒會走60步,造成同遊戲在不同環境和條件有速度感上的不同)
因此利用呼叫Time.deltaTime會回傳: 1秒 / (update更新頻率)
因此當Update的參數乘上Time.deltaTime,就會變成一秒的量 ,而成為一個不受FPS影響的值
(假設Translate(Vector3(0, 0, 1)代表走一步,FPS30的環境一秒會有三十步 * (1/30) = 一步,FPS60的環境一秒會走60步 * (1/60) = 一步,使同遊戲在不同環境和條件的速度感一致)
而update的function有三種
2.FixedUpdate:由於物理引擎的計算和普通Update頻率不同,而FixedUpdate正是以物理引擎頻率為更新頻路的Update Function,因此跟物理特性有關的程式如: rigidbody.AddForce()等,會建議寫在FixedUpdate以取得比較精準的結果
3.LateUpdate: 在Update和FixedUpdate結束後被呼叫,LateUpdate主要用途是用來將輔助先先後順序的程式碼可以更好的被分開,官方舉例是攝影機要追隨物體移動,那好的設計是物體在Update裡計算完移動後,才在LateUpdate更新攝影機在物體後的位置
這邊真的蠻重要的
不然之前都傻傻的混在一起寫,平白浪費了很多資源,程式碼也容易冗長混亂^ ^|||
沒有留言:
張貼留言