U3D進階 | 常用 API 之 Invoke 函式呼叫
阿新 • • 發佈:2018-12-11
金錢副本細節完善
- 寶箱掉落
- 給寶箱預製體新增剛體元件即可。
- 實現按鍵寶箱批量掉落
- 將例項化生成寶箱的程式碼單獨封裝成一個函式;
- 使用 for 迴圈,批量生成寶箱。
- 寶箱自動掉落
- 現在我們是通過按鍵,程式呼叫 “生成寶箱” 的函式來實現功能。在遊戲中,這個 “生成寶箱” 的函式,是需要由程式自動呼叫的。
- 使用 Invoke 函式實現。
Invoke 函式
- Invoke 函式程式碼
- Invoke ( string, float ):多少秒後執行某個函式 [只調用一次]。
- String:要執行函式的名稱;
- Float:秒數,倒計時的時間。
- InvokeRepeating ( string, float, float )
- CancelInvoke ( ):取消這個指令碼中所有的 Invoke 呼叫。
public class CreateBoxes : MonoBehaviour { public GameObject goPrefab; void Start () { InvokeRepeating ("CreateMoreBox", 1.0f, 1.0f); } void Update () { if(Input.GetKeyDown(KeyCode.Space)) { CreateMoreBox(); } if (Input.GetKeyDown(KeyCode.Z)) { CancelInvoke(); } } void CreateMoreBox() { for(int i = 0; i <= 5; i++) { Vector3 position = new Vector3(Random.Range(-4.0f, 4.0f), 3, Random.Range(-4.0f, 4.0f)); GameObject.Instantiate(goPrefab, position, Quaternion.identity); } } }
- Invoke ( string, float ):多少秒後執行某個函式 [只調用一次]。
金錢副本主角控制
- 主角基本控制
- 建立一個 Cube 模型,美化一下作為主角;
- 新增剛體元件,使用剛體的 MovePosition 結合按鍵控制主角移動。
- 控制主角與 Box 碰撞
- 主角碰撞到 Box,Box 自動銷燬。
public class PlayerController : MonoBehaviour { private Rigidbody m_Rigidbody; private Transform m_Transform; void Start () { m_Rigidbody = gameObject.GetComponent<Rigidbody> (); m_Transform = gameObject.GetComponent<Transform> (); } void Update () { if(Input.GetKey(KeyCode.W)) { m_Rigidbody.MovePosition(m_Transform.position + Vector3.forward * 0.2f); } if (Input.GetKey(KeyCode.A)) { m_Rigidbody.MovePosition(m_Transform.position + Vector3.left * 0.2f); } if (Input.GetKey(KeyCode.S)) { m_Rigidbody.MovePosition(m_Transform.position + Vector3.back * 0.2f); } if (Input.GetKey(KeyCode.D)) { m_Rigidbody.MovePosition(m_Transform.position + Vector3.right * 0.2f); } } void OnCollisionEnter(Collision coll) { if(coll.gameObject.tag == "Box") { GameObject.Destroy (coll.gameObject); } } }
- 主角碰撞到 Box,Box 自動銷燬。