如何检测玩家是否靠近游戏对象(C#)单位5
我怎么可能检测到玩家是否靠近目标。 没有raycast的帮助 这是我的密码:如何检测玩家是否靠近游戏对象(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
[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=distanceobj1.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;}}}这不起作用><音频总是在重复