Unity,我如何使用我创建的Patroll.cs脚本?收到错误

时间:2016-07-23 14:29:07

标签: c# unity3d unityscript unity5

在Hierarchy中我有主摄像头,ThirdPersonController,Plane,Terrain,Cylinder,Wall。

在Assets中,我创建了一个名为My Scripts的新文件夹,然后在c#中创建了一个名为Patroll.cs的新脚本,该脚本应该让ThirdPersoncontroller字符在两个给定点之间行走以进行巡逻。但是,当我将Patroll脚本添加/拖动到ThirdPersonController时,我收到错误:

错误发生在行上的Patroll.cs脚本中:

if (agent.remainingDistance < 0.5f)

错误是:

MissingComponentException:“ThirdPersonController”游戏对象没有附加“NavMeshAgent”,但是脚本正在尝试访问它。 您可能需要向游戏对象“ThirdPersonController”添加NavMeshAgent。或者您的脚本需要在使用之前检查组件是否已连接。

这是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的Hierarchy中单击然后在菜单中单击Component&gt;导航&gt;导航网格代理

现在在Inspector的ThirdPersonController中,我看到添加的Nav Mesh Agent。

现在,当我正在运行游戏时,我遇到了同样的错误:

MissingComponentException:“ThirdPersonController”游戏对象没有附加“NavMeshAgent”,但是脚本正在尝试访问它。 您可能需要向游戏对象“ThirdPersonController”添加NavMeshAgent。或者您的脚本需要在使用之前检查组件是否已连接。

我试图点击Window&gt;上的菜单导航然后点击Bake。 但它没有解决它。

Patroll.cs脚本中同一行上的错误相同。

但是我在第三个PersonController中添加了一个Nav Mesh Agent,那么为什么在错误中它说没有附加?如何启用代理?

在ThirdPersonController中添加了Inspector中的Patroll脚本后,我在Patroll部分看到我可以添加点更改另一个值,但属性:Dest Point和Agent是灰色的,不能使用。

在Agent中我看到:Agent None(导航网格代理),但我无法点击它,它的灰色未启用。

更新:

这是Patroll脚本和Nav Mesh Agent右侧的ThirdPersonController Inspector的屏幕截图。

Screenshot

在Patroll.cs脚本中,我将变量代理更改为公共:

public NavMeshAgent agent;

现在,ThirdPersonController在Inspector中有Nav Mesh Agent和Patroll脚本,我还在巡逻中添加了agaent:ThirdPersonController(Nav Mesh Agent),但现在我收到了错误:

“GetRemainingDistance”只能在已放置在NavMesh上的活动代理上调用。 UnityEngine.NavMeshAgent:get_remainingDistance() 巡逻:更新()(在Assets / My Scripts / Patroll.cs:41)

巡逻脚本中的第41行是:

if (agent.remainingDistance < 0.5f)

Screenshot

1 个答案:

答案 0 :(得分:1)

您尚未在NavMeshAgent脚本组件中分配包含对象的Patroll组件。

enter image description here

代理变量字段应该是public或serializeable private。

public NavMeshAgent Agent;