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

问题描述 投票:0回答:1

在层次结构中,我有一个主摄像机、第三人称控制器、平面、地形、圆柱体和墙壁。

在资产中,我创建了一个名为“我的脚本”的新文件夹,并在其中用 C# 创建了一个名为

Patroll.cs
的新脚本。该脚本应使 ThirdPersonController 角色在两个给定点之间行走进行巡逻。但是当我将 Patroll 脚本添加/拖动到 ThirdPersonController 时,出现错误。

错误出现在 Patroll.cs 脚本中一行:

if (agent.remainingDistance < 0.5f)

错误是:

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

这是Paroll.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 上的层次结构,然后在菜单中单击“组件”>“导航”>“导航网格代理”

现在在检查器的 ThirdPersonController 中我可以看到添加的导航网格代理。

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

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

我尝试单击菜单中的“窗口”>“导航”,然后单击“烘焙”,但没有解决问题。 Patroll.cs 脚本中同一行的相同错误仍然存在。

但是我向 ThirdPersonController 添加了一个导航网格代理,那么为什么在错误中它说它未附加?以及如何启用代理?

在 ThirdPersonController 中添加了检查器中的巡逻脚本后,我在巡逻部分看到了这一点。我可以添加点更改其他值,但是“目的地”和“代理”属性是灰色的无法使用。

在代理中,我看到“代理:无(导航网格代理)”,但我无法单击它,它是灰色的且已禁用。

这是右侧的 ThirdPersonController Inspector 的屏幕截图,Paroll 脚本和导航网格代理。

Screenshot

在 Patroll.cs 脚本中,我将变量

agent
更改为公共:

public NavMeshAgent agent;

现在 ThirdPersonController 在检查器中具有导航网格代理和巡逻脚本,我还在巡逻中添加了代理:ThirdPersonController(导航网格代理),但现在我收到错误:

“GetRemainingDistance”只能在已放置在导航网格上的活动代理上调用。 UnityEngine.NavMeshAgent:get_remainingDistance() Patroll:Update()(位于 Assets/My Scripts/Patroll.cs:41)

patroll 脚本中的第 41 行是:

if (agent.remainingDistance < 0.5f)

Screenshot

c# unity-game-engine
1个回答
1
投票

您尚未在

NavMeshAgent
脚本组件中分配包含对象的
Patroll
组件。

enter image description here

代理变量字段应该是公共的或可序列化的私有。

public NavMeshAgent Agent;
© www.soinside.com 2019 - 2024. All rights reserved.