Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检测玩家是否靠近游戏对象(C#)单位5_C#_Unity5 - Fatal编程技术网

如何检测玩家是否靠近游戏对象(C#)单位5

如何检测玩家是否靠近游戏对象(C#)单位5,c#,unity5,C#,Unity5,我怎么可能检测到玩家是否靠近目标。 没有raycast的帮助 这是我的密码: [SerializedField] Transform obj1; public GameObject player; void Update(){ if(obj1.transform.position - player.position < 5) { audio.Play(); } } [SerializedField] 变换obj1; 公共游戏对象玩家; 无效更新(){ i

我怎么可能检测到玩家是否靠近目标。 没有raycast的帮助

这是我的密码:

[SerializedField]
Transform obj1;

public GameObject player;

void Update(){
    if(obj1.transform.position - player.position < 5) {
       audio.Play();
    }
}
[SerializedField]
变换obj1;
公共游戏对象玩家;
无效更新(){
if(obj1.transform.position-player.position<5){
音频播放();
}
}

这就是我想要得到的。我怎么能那样做呢。请提供帮助

您可以使用以下代码查找一个对象是否靠近另一个对象:

float distance = Vector3.Distance(object1.transform.position, object2.transform.position);
float maxDistance = 10.0f;
bool isNear = distance <= maxDistance;
float distance=Vector3.distance(object1.transform.position,object2.transform.position);
浮动最大距离=10.0f;

bool isNear=distance
obj1.transform.position-player.position
将返回一个
Vector3
。可以使用该向量的大小作为距离:

if ((obj1.transform.position - player.position).magnitude < 5.0f)
    audio.Play();
if((obj1.transform.position-player.position)。幅值<5.0f)
音频播放();
作为一个性能提示,您可以通过使用幅值平方来节省昂贵的平方根运算:

if ((obj1.transform.position - player.position).sqrMagnitude < 25.0f)
    audio.Play();
if((obj1.transform.position-player.position).sqrMagnitude<25.0f)
音频播放();

Vector3.距离
参考,先生,你能给我解释一下为什么它总是有sqrMagnitude吗?距离会有多远?@TheGinxx009如果你不需要精确的距离,那么距离平方就比较便宜,因为它不需要计算平方根。在这种情况下也是可以接受的,因为如果
dist
,那么
dist^2
。我遇到了一个大问题。音频疯了void FixedUpdate(){AudioSource audio=GetComponent();if((SampleTrash.transform.position-thiscamer.transform.position).sqrMagnitude<25.0f){audio.clip=third;audio.PlayOneShot(third);}@TheGinxx009定义“疯了”。虽然我的猜测是,只要对象足够靠近,每次更新都会播放音频。添加一个仅在当前未播放剪辑时播放该剪辑的检查。float nextSoundTime=3f;if((SampleTrash.transform.position-thiscamer.transform.position).sqrMagnitude<25.0f){if(Time.Time>=nextSoundTime){audio.clip=third;audio.PlayOneShot(third);nextSoundTime=Time.Time+third.length;}}}这不起作用><音频总是在重复