這裏有很多U3D資源、U3D培訓視頻、U3D教程、U3D常見問題、U3D項目源碼,我們致力於打造業內unity3d培訓、學習第一品牌
Mono Develop腳本編輯器注意事項:
1、項目運行過程中的修改不會保存。
2、腳本只能依附於遊戲對象或由其他腳本調用才能運行。
3、一個腳本可以放在多個遊戲對象上面,是多個實例。
4、一個腳本的多個實例和其他腳本之間互不干擾。
5、腳本在Project中不要加.cs,類名和cs名稱一致,所有類繼承自MonoBehaviour。
6、初始化不要放到構造函數中,而是放到startc()方法中。
7、放到遊戲對象中的腳本(實例化)可以在視圖的Inspector(屬性欄)中修改屬性
8、get/set寫法屬性不被識別。
9、直接public字段就能當屬性用,不寫修飾符就是私有。
項目工程分層欄:
--Scenes:存放場景
--Scripts:存放腳本
--Resource:資源包:Textures:貼圖、Materials:材質(主要爲mat文件)、Audios:聲音、Models:模型(存放FBX等文件)
創建、克隆、銷燬遊戲對象
動態創建特點:動態創建出來的對象運行時在Hierarchy(層次欄)中可以看到。
克隆遊戲對象產生複製對象的效率高,比如遊戲中產生大量子彈。調用Instantite來產生對象,Destroy(obj)是立即銷燬遊戲對象。
動態加腳本的方法:(只要把腳本名稱傳給AddComponen即可)
例如:
1、//給遊戲物體添加名爲FoobarScript的腳本
GameObject.AddComponent ("FoobarScript");
2、//給遊戲物體添加剛體
Rigidbody rb = GameObject.AddComponent ("Rigidbody");
3、//給遊戲物體添加球體碰撞器
SphereCollider sc = GameObject.AddComponent ("SphereCollider");
核心類的應用:
1)通過名稱來查找:
GameObject player = new GameObject("Player");
GameObject go=GameObject.Find(“Player”);
2)通過tag標籤獲取單個遊戲對象:
GameObject go=GameObject.FindWithTag(“Player”);
GameObject go=GameObject..FindGameObjectWithTag (“Player”);
3)通過遊戲標籤獲取多組遊戲對象:
GameObject[] go=GameObject.FindGameObjectsWithTag (“Player”);
組件引用函數:
如果要訪問的組件不屬於常用組件,或者訪問的是遊戲對象上的腳本(腳本屬於自定義組件),可以通過組件引用函數來得到組件的引用。
GetComponent 得到組件
GetComponents 得到組件列表(用於有多個同類型組件的時候)
GetComponentInChildren 得到對象或對象子物體上的組件
ScriptName other = GameObject.GetComponent<ScriptName>();
Time類:
方法Update();受當前渲染效果的影響,有時快有時慢,幀率會變化,Time,delta Time獲得自上次Update一來經歷的時間,只應該在Update()中使用deltaTime,OnGUI、FiexedUpdate等裏面不要用。
例子:
1、按下A鍵,遊戲物體向左移動;按下D鍵,遊戲物體向右移動
float move_h=0;
if (Input.GetKey (KeyCode.A)) {
move_h-=Time.deltaTime;
}
if (Input.GetKey (KeyCode.D)) {
move_h+=Time.deltaTime;
}
transform.Translate(new Vector3(move_h,0,move_v));
2、輸出每幀的時間:
void Update () {
float a=Time.delatTime;
print(a);
}
協同程序:
定義:
協同程序,即在主程序運行時同時開啓另一段邏輯處理,來協同當前程序的執行。換句話說,開啓協同程序就是開啓一個線程。
Yield:可以實現將一段程序延遲執行或者將其各個部分分佈在一個時間段內連續執行
例子:
void Start () {
print("Start開始");
StartCoroutine(Do());
print("Do調用後");
}
IEnumerator Do(){
print("Do開始");
yield return WaitForSeconds(3.0f);
print("暫停3秒後");
}
Random類(隨機數):
loat a=Random.value;
int b=Random.Range(0,100) 包括最大和最小
float c=Random.Range(0.0f,1.0f); 包括最小但不包括最大
消息傳遞函數:
GameObject.SendMessage:向自身的腳本中發送消息
GameObject.BroadcastMessage:向自身即子物體腳本中發送消息
GameObject.SendMessageUpwards:向自身即父物體中發送消息
Sphere:
void Start () {
gameObject.SendMessageUpwards ("Do","向父對象發出信息");
}
Cube:
void Do(string message){
print (message);
}