2016-11-28 87 views
1

我正在开发我的第一个Unity游戏,并且遇到此脚本的问题。Unity 5 - Physics.OverlapSphere无法正常工作

void FixedUpdate() 
{ 
    Debug.Log ("dead is " + dead); 
    dead = Physics.OverlapSphere (frontCheck.position, radius, whatIsWall); 

    if (dead == true) 
    { 
     Debug.Log ("Player died!"); 
     Invoke ("Reset", 1); 
    } 
} 

void Reset() 
{ 
    SceneManager.LoadScene ("Game"); 
} 

我想当玩家运行到墙上,使布尔dead true,则使用在玩家面前的变换。我使用的是Physics2D.OverLapPoint,它运行良好,但我必须将玩家的物理学改为3D。我试图现在使用OverLapSphere,但我得到一个错误消息“不能隐式转换类型UnityEngine.Collider[]bool。我该怎么做才能做到这一点?我非常初级Unity和编码,所以它可能是一个简单的修复。也许我只是需要尝试别的东西吗?谢谢。

回答

0

更好的办法

我认为更好的方法来检测碰撞使用OnColissionEnter。 https://docs.unity3d.com/ScriptReference/Collider.OnCollisionEnter.html

这样,你可以有一个简单的检查如:

void OnCollisionEnter(Collision col) { 
    if (col.gameObject.tag == "Wall"){ 
     dead = true; 
    } 
} 

这里是一个简短的教程:https://unity3d.com/learn/tutorials/topics/physics/detecting-collisions-oncollisionenter

使用OverlapSphere

如果由于某种原因,你喜欢OverlapSphere,那么你需要知道它不会返回一个布尔值,你正在期待。相反,它会返回与球体重叠的所有碰撞体。

https://docs.unity3d.com/ScriptReference/Physics.OverlapSphere.html

我相信你正在寻找的是:

void FixedUpdate() 
{ 
    Debug.Log ("dead is " + dead); 
    Collider[] hitColliders = = Physics.OverlapSphere (frontCheck.position, radius, whatIsWall); 

    if (hitColliders.length != 0) { 
     Debug.Log ("Player died!"); 


     Invoke ("Reset", 1); 
    } 
} 
+0

这做到了!谢谢! – MayorDump

0

我应该怎么做才能使这项工作?

我个人会使用不同的方法,然后重叠。最简单的解决方案之一是使用碰撞器和对象标签。

要回答你的代码不工作的原因。这主要是因为变量“死”不是bool,而“UnityEngine.Collider []'不能是值”真“。

这是Unity prefab第一人称控制器的示例,它已经分配了以下脚本。之后,所有具有任何对撞机和标签设置为“红色”的对象都可以对脚本作出反应。在这种情况下,它会写入“我与触发器发生了碰撞”+某事。

using UnityEngine; 

public class collisionTest : MonoBehaviour { 
    void OnTriggerEnter(Collider trigg) 
    { 
     if (trigg.gameObject.tag == "Red") 
     { 
      Debug.Log("I have collided with trigger" + trigg.gameObject.name); 
      //do your stuff 
     } 
    } 
} 

enter image description here enter image description here

+0

不是OnCollisionEnter通常更好,除非对象需要通过对方?虽然在截图上做得很好,但你已经完成了一个完整的教程;) – pulekies

+1

好吧,因为Physics.OverlapSphere可以让你获得精确的点,在碰撞发生的地方以及半径对爆炸等更有用。问题是如何简单地检查玩家是否在任何时候撞墙。所以我认为对撞机很好。感谢喜欢屏幕:) – Universus