Unity 3D游戏开发 - U3D进阶 | 常用 API 之 Invoke 函数调用

金钱副本细节完善

  • 宝箱掉落
    • 给宝箱预制体添加刚体组件即可。
  • 实现按键宝箱批量掉落
    • 将实例化生成宝箱的代码单独封装成一个函数;
    • 使用 for 循环,批量生成宝箱。
  • 宝箱自动掉落
    • 现在我们是通过按键,程序调用 “生成宝箱” 的函数来实现功能。在游戏中,这个 “生成宝箱” 的函数,是需要由程序自动调用的。
    • 使用 Invoke 函数实现。

Invoke 函数

  • Invoke 函数代码
    • Invoke ( string, float ):多少秒后执行某个函数 [只调用一次]。
      • String:要执行函数的名称;
      • Float:秒数,倒计时的时间。
    • InvokeRepeating ( string, float, float ):多少秒 [第二个参数] 后执行某个函数,并且以后每隔多少秒 [第三个参数] 都会执行该函数一次 [重复调用 N 次]。
    • 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);
              }
          }
      }
      

       

金钱副本主角控制

  • 主角基本控制
    • 创建一个 Cube 模型,美化一下作为主角;
    • 添加刚体组件,使用刚体的 MovePosition 结合按键控制主角移动。
  • 控制主角与 Box 碰撞
    • 主角碰撞到 Box,Box 自动销毁。
      public class PlayerController : MonoBehaviour {
      
          private Rigidbody m_Rigidbody;
          private Transform m_Transform;
      
      	void Start () {
              m_Rigidbody = gameObject.GetComponent ();
              m_Transform = gameObject.GetComponent ();
      	}
      	
      	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);
              }
          }
      }
      

       

 

 

 

你可能感兴趣的:(Unity 3D游戏开发 - U3D进阶 | 常用 API 之 Invoke 函数调用)