2016-09-27 71 views
0

我知道如何阻止我的NPC與玩家發生碰撞,我似乎無法弄清楚如何讓他們停止與對方以及玩家碰撞。Unity 3D:C#NPC互相碰撞

NPC的標籤是「AI」,我現在試過幾件東西,但是我真的不知道這一點?

這是我的代碼,任何幫助表示讚賞。

using UnityEngine; 
using System.Collections; 

public class AI : MonoBehaviour { 
public Transform target; 
public int moveSpeed = 5; 
public int rotationSpeed = 2; 
public Transform myTransform; 
public float minDistance = 0.1f; 


void Awake() 
{ 
    myTransform = transform; 
} 

void Start() 
{ 
    target = GameObject.FindWithTag ("Player").transform; 
} 

void Update() 
{ 
    Vector3 Distance = target.position - myTransform.position; 

    if(Distance.sqrMagnitude>minDistance*minDistance) 
    { 
     myTransform.rotation = Quaternion.Slerp (myTransform.rotation, Quaternion.LookRotation (target.position - myTransform.position), rotationSpeed * moveSpeed * Time.deltaTime); 
     myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime; 
    } 
+0

你的意思是他們應該能夠通過對方的權利?或者完全避免對方? –

+0

我的意思是在所有NPC的距離上設置一個距離,並且距離玩家有一段距離,當他們接近玩家時,他們都會聚在一起,我想嘗試從所有NPC和玩家身上得到距離像1 你能幫忙嗎? :) –

回答

0

在您的AI遊戲對象上找到collider組件並將其移除或檢查IsTrigger選項。

More on IsTrigger:

是對撞機的觸發器?

觸發器不會記錄與傳入的Rigidbody的衝突。相反,當剛體進入或退出觸發器體積時,它會發送OnTriggerEnter,OnTriggerExit和OnTriggerStay消息。

+0

謝謝您的回覆!我似乎仍然無法得到這個工作,我試圖在他們身上有一個盒子對撞機,他們都絞盡腦汁......知道你的意思是什麼教程? –

+0

您是否嘗試移除碰撞體?基本統一GameObjects是由碰撞體創建的,所以你可能會在AI或其子體上有一些。 – CaTs

0

如果您將玩家距離與距其他NPC的距離設置爲不相互碰撞的機制,則可能會發生衝突。例如,代碼可能會告訴NPC遠離玩家移動,這可能意味着移動太靠近另一個NPC,因此這兩個命令相互衝突。

更模塊化的方法可能是將命令分成方法:

AvoidPlayer() 
{ 
    // Code here to move away from player. 
} 

AvoidNPC() 
{ 
    // Code here to move away from NPC. 
} 

你可以調用每一個當它是適當的。如果你想確保NPC和玩家之間始終保持最小距離,請記住衝突命令的邏輯問題。