AI回到原来的位置

时间:2018-03-14 20:12:23

标签: unity3d artificial-intelligence

我希望我的敌人回到起始位置。他跟着我,直到我离开他的范围,然后他就停止了。 此外,我希望我的骨骼停止5秒,然后回到起点,任何想法?我从来没有做过任何涉及时间的事情,并且停止了它 这是我的敌人脚本:

此处还有骨架检查员的大纲:enemy
这是我的敌人脚本:

 using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class chase : MonoBehaviour
{
    public Transform player;
    private Animator anim;
    public float LookRadius = 15f;
    public Transform enemyStartPos;
    // Use this for initialization
    void Start()
    {
        anim = GetComponent<Animator>();
        this.enemyStartPos.position = this.transform.position;
    }

    // Update is called once per frame
    void Update()
    {
        if (!PauseMenu.GameIsPaused)
        {
            if (Vector3.Distance(player.position, this.transform.position) < 15)
            {
                Vector3 direction = player.position - this.transform.position;
                direction.y = 0;
                this.transform.rotation = Quaternion.Slerp(this.transform.rotation, Quaternion.LookRotation(direction), 0.1f);

                anim.SetBool("isIdle", false);
                if (direction.magnitude > 3)
                {
                    this.transform.Translate(0, 0, 0.05f);
                    anim.SetBool("isWalking", true);
                    anim.SetBool("isAttacking", false);
                }
                else
                {
                    anim.SetBool("isAttacking", true);
                    anim.SetBool("isWalking", false);
                }

            }
            else
            {
                if (Vector3.Distance(this.enemyStartPos.position, this.transform.position) >1)
                {
                    Vector3 direction = this.enemyStartPos.position - this.transform.position;
                    direction.y = 0;
                    this.transform.rotation = Quaternion.Slerp(this.transform.rotation, Quaternion.LookRotation(direction), 0.1f);

                    anim.SetBool("isIdle", false);
                    if (direction.magnitude > 1)
                    {
                        this.transform.Translate(0, 0, 0.05f);
                        anim.SetBool("isWalking", true);
                        anim.SetBool("isAttacking", false);
                    }
                }
                else
                anim.SetBool("isIdle", true);
                anim.SetBool("isAttacking", false);
                anim.SetBool("isWalking", false);
            }
        }
    }

    private void OnDrawGizmosSelected()
    {
        Gizmos.color = Color.red;
        Gizmos.DrawWireSphere(transform.position, LookRadius);
    }

}

1 个答案:

答案 0 :(得分:0)

在尝试“编码”之前,请根据您的程序设计考虑一下。您已经设计并实现了一种行为,即“如果机器人的位置在玩家位置的X单位内,则转动机器人并将其移向玩家。”

你想要做的事情可以用同样的方式来考虑(这应该导致类似的代码)..“否则,如果机器人的位置不在玩家位置的X单位内,则转动机器人并移动它朝[原点]。“注意,这意味着您需要定义机器人的[origin]。重点是,无论您是向玩家移动还是向某个任意固定点移动,代码都没有区别。将一个变换移向另一个变换的代码是相同的。

对于“徘徊”,它基本上是相同的思维过程:如果僵尸程序在[原点]的X单位内并且不跟随玩家,则选择随机方向并按此方式移动。 (更好的是,选择一个随机方向并移动一段时间,这样你的机器人不仅会在原点周围抖动)。