Unity,如何使用我创建的 Patroll.cs 脚本?获取错误
Unity, How do i use the Patroll.cs script i created ? Getting errors
在层次结构中,我有主摄像头、ThirdPersonController、平面、地形、圆柱体、墙。
我在资产中创建了一个名为 My Scripts 的新文件夹,并在其中用 c# 创建了一个名为 Patroll.cs 的新脚本,该脚本应使 ThirdPersoncontroller 角色在两个给定点之间行走以进行巡逻。但是当我 adding/dragging 将 Patroll 脚本发送到 ThirdPersonController 时,我收到错误消息:
错误在Patroll.cs行的脚本中:
if (agent.remainingDistance < 0.5f)
错误是:
MissingComponentException:没有 'NavMeshAgent' 附加到 "ThirdPersonController" 游戏对象,但脚本正在尝试访问它。
您可能需要向游戏对象添加 NavMeshAgent "ThirdPersonController"。或者您的脚本需要在使用前检查组件是否已附加。
这是Patroll.cs脚本代码
using UnityEngine;
using System.Collections;
public class Patroll : MonoBehaviour {
public Transform[] points;
private int destPoint = 0;
private NavMeshAgent agent;
// Use this for initialization
void Start () {
agent = GetComponent<NavMeshAgent>();
// Disabling auto-braking allows for continuous movement
// between points (ie, the agent doesn't slow down as it
// approaches a destination point).
agent.autoBraking = false;
GotoNextPoint();
}
void GotoNextPoint() {
// Returns if no points have been set up
if (points.Length == 0)
return;
// Set the agent to go to the currently selected destination.
agent.destination = points[destPoint].position;
// Choose the next point in the array as the destination,
// cycling to the start if necessary.
destPoint = (destPoint + 1) % points.Length;
}
void Update () {
// Choose the next destination point when the agent gets
// close to the current one.
if (agent.remainingDistance < 0.5f)
GotoNextPoint();
}
}
然后我尝试做的是在 ThirdPersonController 的层次结构中单击,然后在菜单中单击组件 > 导航 > 导航网格代理
现在在 Inspector 的 ThirdPersonController 中我看到添加的 Nav Mesh Agent。
现在当我 运行 游戏时,我遇到了同样的错误:
MissingComponentException:没有 'NavMeshAgent' 附加到 "ThirdPersonController" 游戏对象,但脚本正在尝试访问它。
您可能需要向游戏对象添加 NavMeshAgent "ThirdPersonController"。或者您的脚本需要在使用前检查组件是否已附加。
我尝试点击菜单 Window > 导航,然后点击烘焙。
但是并没有解决。
Patroll.cs 脚本中同一行出现相同错误。
但是我向 ThirdPersonController 添加了一个 Nav Mesh Agent 那么为什么在错误中它说它没有附加?以及如何启用代理?
在 ThirdPersonController 中添加了检查器中的 Patroll 脚本后,我在 Patroll 部分看到我可以添加点更改另一个值但是属性:Dest Point 和 Agent 是灰色的不能使用。
在代理中,我看到:代理 None(导航网格代理)但我无法点击它,它是灰色的,未启用。
更新:
这是巡逻脚本和 Nav Mesh Agent 右侧的 ThirdPersonController Inspector 的屏幕截图。
在 Patroll.cs 脚本中,我将变量代理更改为 public:
public NavMeshAgent agent;
现在 ThirdPersonController 在 Inspector 中有 Nav Mesh Agent 和 Patroll 脚本,我还在巡逻中添加了代理:ThirdPersonController(Nav Mesh Agent)但现在我收到错误:
"GetRemainingDistance" 只能在已放置在 NavMesh 上的活动代理上调用。
UnityEngine.NavMeshAgent:get_remainingDistance()
Patroll:Update()(位于 Assets/My Scripts/Patroll.cs:41)
patroll 脚本中的第 41 行是:
if (agent.remainingDistance < 0.5f)
您尚未在 Patroll
脚本组件中分配包含对象的 NavMeshAgent
组件。
代理变量字段应 public 或可序列化私有。
public NavMeshAgent Agent;
在层次结构中,我有主摄像头、ThirdPersonController、平面、地形、圆柱体、墙。
我在资产中创建了一个名为 My Scripts 的新文件夹,并在其中用 c# 创建了一个名为 Patroll.cs 的新脚本,该脚本应使 ThirdPersoncontroller 角色在两个给定点之间行走以进行巡逻。但是当我 adding/dragging 将 Patroll 脚本发送到 ThirdPersonController 时,我收到错误消息:
错误在Patroll.cs行的脚本中:
if (agent.remainingDistance < 0.5f)
错误是:
MissingComponentException:没有 'NavMeshAgent' 附加到 "ThirdPersonController" 游戏对象,但脚本正在尝试访问它。 您可能需要向游戏对象添加 NavMeshAgent "ThirdPersonController"。或者您的脚本需要在使用前检查组件是否已附加。
这是Patroll.cs脚本代码
using UnityEngine;
using System.Collections;
public class Patroll : MonoBehaviour {
public Transform[] points;
private int destPoint = 0;
private NavMeshAgent agent;
// Use this for initialization
void Start () {
agent = GetComponent<NavMeshAgent>();
// Disabling auto-braking allows for continuous movement
// between points (ie, the agent doesn't slow down as it
// approaches a destination point).
agent.autoBraking = false;
GotoNextPoint();
}
void GotoNextPoint() {
// Returns if no points have been set up
if (points.Length == 0)
return;
// Set the agent to go to the currently selected destination.
agent.destination = points[destPoint].position;
// Choose the next point in the array as the destination,
// cycling to the start if necessary.
destPoint = (destPoint + 1) % points.Length;
}
void Update () {
// Choose the next destination point when the agent gets
// close to the current one.
if (agent.remainingDistance < 0.5f)
GotoNextPoint();
}
}
然后我尝试做的是在 ThirdPersonController 的层次结构中单击,然后在菜单中单击组件 > 导航 > 导航网格代理
现在在 Inspector 的 ThirdPersonController 中我看到添加的 Nav Mesh Agent。
现在当我 运行 游戏时,我遇到了同样的错误:
MissingComponentException:没有 'NavMeshAgent' 附加到 "ThirdPersonController" 游戏对象,但脚本正在尝试访问它。 您可能需要向游戏对象添加 NavMeshAgent "ThirdPersonController"。或者您的脚本需要在使用前检查组件是否已附加。
我尝试点击菜单 Window > 导航,然后点击烘焙。 但是并没有解决。
Patroll.cs 脚本中同一行出现相同错误。
但是我向 ThirdPersonController 添加了一个 Nav Mesh Agent 那么为什么在错误中它说它没有附加?以及如何启用代理?
在 ThirdPersonController 中添加了检查器中的 Patroll 脚本后,我在 Patroll 部分看到我可以添加点更改另一个值但是属性:Dest Point 和 Agent 是灰色的不能使用。
在代理中,我看到:代理 None(导航网格代理)但我无法点击它,它是灰色的,未启用。
更新:
这是巡逻脚本和 Nav Mesh Agent 右侧的 ThirdPersonController Inspector 的屏幕截图。
在 Patroll.cs 脚本中,我将变量代理更改为 public:
public NavMeshAgent agent;
现在 ThirdPersonController 在 Inspector 中有 Nav Mesh Agent 和 Patroll 脚本,我还在巡逻中添加了代理:ThirdPersonController(Nav Mesh Agent)但现在我收到错误:
"GetRemainingDistance" 只能在已放置在 NavMesh 上的活动代理上调用。 UnityEngine.NavMeshAgent:get_remainingDistance() Patroll:Update()(位于 Assets/My Scripts/Patroll.cs:41)
patroll 脚本中的第 41 行是:
if (agent.remainingDistance < 0.5f)
您尚未在 Patroll
脚本组件中分配包含对象的 NavMeshAgent
组件。
代理变量字段应 public 或可序列化私有。
public NavMeshAgent Agent;