我在Unity中有一个角色,我正在使用光线投射让他跳跃。但即使光线投射没有到达地面(我可以看到带有调试输出的光线),玩家仍然可以跳跃。任何想法为什么光线总是认为它是碰撞的?光线会撞到我的角色对撞机,导致它是真的吗?我已经在网上搜索了几个小时,我发现没有什么能解决这个问题。这是我的代码:
void FixedUpdate()
{
Ray ray = new Ray();
RaycastHit hit;
ray.origin = transform.position;
ray.direction = Vector3.down;
bool output = Physics.Raycast(ray, out hit);
Debug.DrawRay(ray.origin, ray.direction, Color.red);
if (Input.GetKey(KeyCode.Space) && output)
{
r.AddForce(Vector3.up * 1f, ForceMode.VelocityChange);
}
}
答案 0 :(得分:2)
光线会撞到我的角色对撞机吗?
是的,这是可能的。
这实际上是Debug.Log
可以轻松解决的问题。
将Debug.Log("Ray Hit: " + hit.transform.name);
放在if
语句中,它会显示哪些对象阻止Raycast
。
如果这确实是问题,this帖子描述了许多解决方法。答案和代码稍有变化,因为这个问题是关于3D而不是2D。只需使用图层。把你的玩家放在第9层然后问题应该消失。
void FixedUpdate()
{
int playerLayer = 9;
//Exclude layer 9
int layerMask = ~(1 << playerLayer);
Ray ray = new Ray();
RaycastHit hit;
ray.origin = transform.position;
ray.direction = Vector3.down;
bool output = Physics.Raycast(ray, out hit, 100f, layerMask);
Debug.DrawRay(ray.origin, ray.direction, Color.red);
if (Input.GetKey(KeyCode.Space) && output)
{
r.AddForce(Vector3.up * 1f, ForceMode.VelocityChange);
Debug.Log("Ray Hit: " + hit.transform.name);
}
}