2016年12月13日 星期二

Unity_Prefab的介紹



Prefab

一個可重複建立的物件,可以事先將內容都制訂好,當需要的時機在clone出來使用

1.程式只能抓放在Resources資料夾中的內容(沒有就自行建立)
(建立出來的座標和旋轉角度皆為0)

2.要是到時候要指定Prefab物件的名稱,記的後面要加上(Clone)

具現化(Instantiate)Prefab
//1.物件名稱 2.建立時的座標(x,y,z) 3.建立時的角度(Quaternion.identity代表同一性)
// Quaternion.Euler(0,0,90)設定傾斜角度
Instantiate(Resources.Load("Cube Test"), new Vector3(3, 1, (float)-4.5), Quaternion.identity);


摧毀(Destroy)Prefab
GameObject  go= (GameObject)Instantiate();
Destroy(go);
Destroy(go,1.5f);  //1.5秒後銷毀

具現化後給予指定某些變數值
GameObject obj = (GameObject)Instantiate(Resources.Load("HeroPrefab"), new Vector3(transform.position.x , transform.position.y - 2f, transform.position.z), Quaternion.Euler(0, 0, 180));

//指定此物件中HeroShoot腳本的setDir方法
obj.GetComponent<HeroShoot>().setDir(DIR.DOWN);

具現化後指定父層級(例如ui放在canvas之下)
giftPrefab = (GameObject)Instantiate(Resources.Load("UISystem/Gift/GiftUI"), Vector3.zero, Quaternion.identity);
//指定父層級是誰          
 giftPrefab.transform.SetParent (GameObject.FindObjectOfType<Canvas>().transform);
//避免物件大小出問題,固定設成1         
giftPrefab.transform.localScale = Vector3.one;

呼叫PrefabScript的方法
//呼叫GiftTabPrefab這個ScriptsetGiftTabSource方法
giftTabPrefab[i].GetComponent<GiftTabPrefab>().setGiftTabSource(giftTabSource[i]); 
      
想從Prefab物件中控制Scenes上的非Prefab物件
在生成PrefabScript中就將GameObject指定進去,來讓各個動態生成的Prefab各自使用

Prefab中加入Script
        //建立一個物件,掛上自己這個Script,並且指定物件
        GameObject o = new GameObject();
        Recycler recycler = o.AddComponent<Recycler>();
        recycler.prefab = prefab;
        recycler.startSize = startSize;
        recycler.targetSize = targetSize;

在自己的物件上加入Script
gameObject.AddComponent<PlayerJoystick>();

Prefab放上Scenes修改後想儲存
按控制欄右上角的Apply就可以直接儲存

沒有留言:

張貼留言