我试图用球体做一个非常简单的比赛,但是,我遇到了很多问题。
首先,我试图为对手制作一个非常简单的AI系统。
我在这里遇到的问题是,我希望对手能够发现障碍并避免使用Raycast,但只能使用某种类型的障碍物,检测到一个简单的立方体。
我创造了一个简单的球体作为对手并编写了一个脚本,以便它可以移动并检测障碍物 这是更新功能:
void FixedUpdate()
{
transform.Translate(Vector3.forward * Time.deltaTime * speed);
if (Physics.Raycast(transform.position, transform.forward, 100.0f))
print("There is something in front of the object!");
}
仅当前方有立方体且未检测到任何其他障碍物时才会打印消息。怎么会这么错?此外,有什么想法当对手光线投射障碍时如何向左或向右移动?
答案 0 :(得分:1)
使用光线投射仅检测到对撞机组件,确保您有合适的对撞机(对撞机的大小不一定与渲染的网格大小相匹配)。通常情况下,对象所在的层也很重要,但您使用的语法无论如何都不会检查图层蒙版
答案 1 :(得分:0)
您可以使用Debug.DrawLine()或Debug.DrawLine()来调试线路,看它是否越过障碍物。 这是他们的文档 DrawRay DrawLine 对于左右移动我认为你可以添加这样的东西
void FixedUpdate()
{
Vector3 dir = Vector3.forward * Time.deltaTime * speed;
if (Physics.Raycast(transform.position, transform.forward, 100.0f))
{
print("There is something in front of the object!");
dir += Vector3.Right * horizontalSpeed * Time.deltaTime;
}
}
如果它是左侧或右侧,您也可以考虑使用光线投射两条光线来检测倾斜的方向。
答案 2 :(得分:0)
Unity Physics最佳实践(如https://unity3d.com/pt/learn/tutorials/topics/physics/physics-best-practices中所述)建议我们不要在FixedUpdate中使用Raycast,因为它很难处理,可能并不总是有效。
还有一些关于矩阵图层的提示可以帮助您提高性能并避免此类错误。
祝你好运!