C#中徘徊的AI

Ara*_*ash 4 c# unity-game-engine

我正在尝试创建一个徘徊的AI

我正在使用统一标准资产第三人称AI

但是问题是AI只是移动到了某个点而不能

在这些点之间巡逻

这是代码?

我该如何修改才能进行巡逻?

使用系统;
使用UnityEngine;

命名空间UnityStandardAssets.Characters.ThirdPerson
{
    [RequireComponent(typeof(UnityEngine.AI.NavMeshAgent))]
    [RequireComponent(typeof(ThirdPersonCharacter))]
    公共类AICharacterControl:MonoBehaviour
    {
        公共UnityEngine.AI.NavMeshAgent代理{ 私人套装;} //路径查找所需的navmesh代理
        公共ThirdPersonCharacter字符{get; 私人套装;} //我们正在控制的字符
        公共转换目标;//要瞄准的目标


        私有void Start()
        {
            //获取我们需要的对象上的组件(由于需要组件,因此不应为null,因此无需检查)
            代理= GetComponentInChildren();
            字符= GetComponent();

            agent.updateRotation = false;
            agent.updatePosition = true;
        }


        私人无效Update()
        {
            如果(目标!=空)
                agent.SetDestination(target.position);

            如果(agent.remainingDistance> agent.stoppingDistance)
                character.Move(agent.desiredVelocity,false,false);
            其他
                character.Move(Vector3.zero,false,false);
        }


        公共无效SetTarget(转换目标)
        {
            this.target =目标;
        }
    }
}

sou*_*rop 7

要在两点之间进行AI巡逻,您需要定义第二点,并更改AI的行为以在到达第一点时更改目标。当前,一旦达到目标(即停止),它只会以零速度运动。

无需过多修改代码,您可以通过执行以下操作将其扩展为在两个位置之间移动。

using System;
using UnityEngine;

namespace UnityStandardAssets.Characters.ThirdPerson
{

    [RequireComponent(typeof (UnityEngine.AI.NavMeshAgent))]
    [RequireComponent(typeof (ThirdPersonCharacter))]
    public class AICharacterControl : MonoBehaviour
    {
        public UnityEngine.AI.NavMeshAgent agent { get; private set; }             // the navmesh agent required for the path finding
        public ThirdPersonCharacter character { get; private set; } // the character we are controlling
        public Transform start;
        public Transform end;

        private Transform target;
        private boolean forward = true;

        private void Start()
        {
            // get the components on the object we need ( should not be null due to require component so no need to check )
            agent = GetComponentInChildren<UnityEngine.AI.NavMeshAgent>();
            character = GetComponent<ThirdPersonCharacter>();

            agent.updateRotation = false;
            agent.updatePosition = true;
        }


        private void Update()
        {
            if (target != null)
                agent.SetDestination(target.position);

            if (agent.remainingDistance > agent.stoppingDistance)
            {
                character.Move(agent.desiredVelocity, false, false);
            }
            else
            {
                SetTarget(forward ? start : end);
                forward = !forward;
            }
        }

        public void SetTarget(Transform target)
        {
            this.target = target;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我修改了,Update()以告知AI如果目标离当前目标太近,就更改目标。start在顶部还需要设置一个额外的Transform定义(),并boolean用于存储AI的前进方向。

该代码尚未在Unity中进行测试,因此可能需要进行一些修改,但它应该为您提供正确的想法。