2017-02-02 39 views
1

如何检测玩家是否靠近对象。 没有raycast的帮助。如何检测玩家是否接近GameObject(C#)Unity5

这里是我的代码:

[SerializedField] 
Transform obj1; 

public GameObject player; 

void Update(){ 
    if(obj1.transform.position - player.position < 5) { 
     audio.Play(); 
    } 
} 

这是我喜欢获得。我怎么能这样做。请帮助

+1

':

if ((obj1.transform.position - player.position).magnitude < 5.0f) audio.Play(); 

带有一点性能技巧的,你可以不使用平方大小节省昂贵的平方根运算Vector3.Distance' – Gusman

+0

[Vector3.Distance函数]的参考(https://docs.unity3d.com/ScriptReference/Vector3.Distance.html) –

回答

1

obj1.transform.position - player.position将返回Vector3。您可以使用向量的大小为你的距离:

if ((obj1.transform.position - player.position).sqrMagnitude < 25.0f) 
    audio.Play(); 
+0

您能向我解释一下为什么它总是有sqrMagnitude?会有多远? – TheGinxx009

+0

@ TheGinxx009如果您不需要精确的距离,则距离平方计算起来更便宜,因为它不需要计算平方根。在这种情况下也是可以接受的,因为如果'dist Abion47

+0

ow。对不起刚刚接触矢量。无论如何,感谢 – TheGinxx009

0

你可以找到一个对象是否接近用下面的代码另一个对象:

float distance = Vector3.Distance(object1.transform.position, object2.transform.position); 
float maxDistance = 10.0f; 
bool isNear = distance <= maxDistance;