Rigidbogy組件可以使遊戲對象在物理系統的控制下運動 , 發射一顆子彈 ,如果子彈沒有命中任何物體 ,最後 子彈會因為重力落下 , 此時就可以利用 Rigidbody 組件實現 , 但是使用該組件一般在 FixedUpdate 函數中執行 , 因為物理仿真一般都在固定頻率下進行計算的 . (FixedUpdate 函數是固定頻率調用的 , 與你的硬體配置沒有關係 , 忘記的小夥伴請參考之前的九大生命周期)
下面介紹一下常用的方法 :
AddForce 方法 : 給物體加一個瞬時的力 , 物體受這個力運動 (扔手雷的時候就是用這個方法) ;AddTorque 方法 : 給物體添加一個扭矩 (這個方法用的較少) ;Sleep 方法 : 使物體進入休眠狀態 , 至少會休眠一幀(一般在 Awake 裡調用);WakeUp 方法 : 使物體從休眠狀態轉為喚醒狀態 ;
我們做一個發射子彈的小例子吧
建一個 Sphere 作為子彈 , 掛上bullet 腳本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class bullet : MonoBehaviour
{
// 定義一個 Rigidbody 類型的對象
private Rigidbody rig;
private void Awake()
{
// 獲取這個物體身上的 Rigidbody 組件
rig = GetComponent<Rigidbody>();
// 休眠一幀
rig.Sleep();
}
private void Start()
{
// 喚醒
rig.WakeUp();
// 受到一個方向向前 500N 的力
rig.AddForce(Vector3.forward * 500f);
}
}
再建一個空物體 , 改名為 Shoot , 掛上 Shoot 腳本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Shoot : MonoBehaviour
{
// 定義一個子彈對象
private Transform m_bullet;
private void Start()
{
// 獲取這個子彈對象
m_bullet = Resources.Load<Transform>("bullet");
}
private void Update()
{
// 如果按下滑鼠左鍵
if (Input.GetMouseButtonDown(0))
{
// 實例化一個子彈
Instantiate(m_bullet);
}
}
}
然後我們運行unity
按一下滑鼠左鍵 , 就會生成一個子彈 , 子彈在生成的時候會受到一個向前500N的力 , 然後以拋物線的方式落到地上 ;
大家可以看一下運行效果 , 是不是和現實生活中扔出去一個東西一樣 , 會拋物線落到地上 .
下期為大家介紹一下 Time 類 , 讓你可以在 unity 中掌控時間 .