我想要一個簡單地向前走直到撞到墻壁的角色,然后它會旋轉 180 度并重復該動作。讓他向前走很容易,我如何編程他撞墻?我當前的代碼:
public class Enemy : MonoBehaviour
{
public float speed = 5;
public Vector3 userDirection = Vector3.forward;
// Update is called once per frame
void Update()
{
transform.position = userDirection * speed * Time.deltaTime;
}
}
uj5u.com熱心網友回復:
您可以使用光線投射來檢測墻壁并避開它們。
Unity 中的Raycast是一種物理函式,可將光線投射到場景中,如果成功擊中目標,則回傳布林值
以下代碼是 raycast 的簡單演示。距離決定了你的光線投射多遠,而圖層蒙版決定了光線應該檢測到的層。因此,你必須把你的墻放在一個圖層中,并讓這個變數等于:
public float distance;
public LayerMask wallLayerMask;
public Vector3 userDirection = Vector3.forward;
void Update()
{
if (Physics.Raycast(transform.position, userDirection, distance, wallLayerMask))
{
// rotate, possibly:
// userDirection *= -1
}
transform.position = userDirection * speed * Time.deltaTime;
}
更新
如評論中所述,您還可以使用對撞機。要使用對撞機,您需要向敵人添加另一個空的游戲物件,向其添加一個 SphereCollider。Sphere Collider 的半徑決定了您想要檢測墻壁的距離。然后將以下代碼添加到第二個物件:
// a reference to your enemy controller class
public Enemy enemy;
private void OnCollisionEnter(Collider other)
{
enemy.Rotate();
}
每當具有碰撞器的物件與我們的物件發生碰撞時,都會呼叫 OnCollisionEnter。您需要為這個新物件(wallCheck)分配一個圖層,為您的墻壁分配另一個圖層。然后從 Edit -> Project Settings -> Physics 取消選中 wallCheck 與除墻壁圖層以外的任何圖層的碰撞。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/517270.html
標籤:C#unity3d
上一篇:加載的場景元素未完全顯示
下一篇:使用剛體在Unity3D中沖刺