团结 5 - Physics.OverlapSphere 不工作
Unity 5 - Physics.OverlapSphere not working
我正在开发我的第一个 Unity 游戏,但我遇到了这个脚本的问题。
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
为真,在玩家面前使用变换。我使用的是 Physics2D.OverLapPoint 并且运行良好,但我必须将玩家的物理效果更改为 3D。我现在正在尝试使用 OverLapSphere,但我收到一条错误消息“无法将类型 UnityEngine.Collider[]
隐式转换为 bool
。我应该怎么做才能完成这项工作?我是 Unity 和编码的初学者总的来说,所以这可能是一个简单的修复。也许我只需要尝试其他方法?谢谢。
更好的方法
我认为检测碰撞的更好方法是使用 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,那么您需要知道它并不像您期望的那样 return 是布尔值。相反,它 return 是与球体重叠的所有对撞机。
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);
}
}
What should I do to make this work?
我个人会使用不同的方法然后重叠。最简单的解决方案之一是使用碰撞器和对象标签。
回答为什么您的代码不起作用。主要是因为变量 "dead" 不是 bool 并且 'UnityEngine.Collider[]' 不能是值 "true".
这是 Unity 预制第一人称控制器的示例,已分配以下脚本。在那之后,所有具有任何碰撞器和标签集 ro "red" 的对象都会对 scrip.In 做出反应,在这种情况下它会写 "I have collided with trigger"+something.
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
}
}
}
我正在开发我的第一个 Unity 游戏,但我遇到了这个脚本的问题。
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
为真,在玩家面前使用变换。我使用的是 Physics2D.OverLapPoint 并且运行良好,但我必须将玩家的物理效果更改为 3D。我现在正在尝试使用 OverLapSphere,但我收到一条错误消息“无法将类型 UnityEngine.Collider[]
隐式转换为 bool
。我应该怎么做才能完成这项工作?我是 Unity 和编码的初学者总的来说,所以这可能是一个简单的修复。也许我只需要尝试其他方法?谢谢。
更好的方法
我认为检测碰撞的更好方法是使用 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,那么您需要知道它并不像您期望的那样 return 是布尔值。相反,它 return 是与球体重叠的所有对撞机。
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);
}
}
What should I do to make this work?
我个人会使用不同的方法然后重叠。最简单的解决方案之一是使用碰撞器和对象标签。
回答为什么您的代码不起作用。主要是因为变量 "dead" 不是 bool 并且 'UnityEngine.Collider[]' 不能是值 "true".
这是 Unity 预制第一人称控制器的示例,已分配以下脚本。在那之后,所有具有任何碰撞器和标签集 ro "red" 的对象都会对 scrip.In 做出反应,在这种情况下它会写 "I have collided with trigger"+something.
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
}
}
}