使我的AI动作无法按预期运行的Unity C#代码

时间:2019-12-14 11:17:41

标签: c# unity3d

我正在创建3D单人FPS,目前正在研究游戏中敌人的移动。由于这是我的第一款游戏,对C#的了解并不多,所以我按照教程进行了操作:

https://www.youtube.com/watch?v=_Z1t7MNk0c4

该教程适用于2d,但表示它也适用于3d 这是我拥有的脚本

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

 public class movment_shoot : MonoBehaviour {

     public float speed;
     public float stoppingDistance;
     public float retreatDistance;

     private Transform player;

     void Start() {
         player = GameObject.FindGameObjectWithTag("Player").transform;

     }

     void Update() {

         if (Vector2.Distance(transform.position, player.position) > stoppingDistance) {

             transform.position = Vector2.MoveTowards(transform.position, player.position, speed * 
 Time.deltaTime);

         } else if (Vector2.Distance(transform.position, player.position) < stoppingDistance && 
 Vector2.Distance(transform.position, player.position) > retreatDistance) {

            transform.position = this.transform.position;

         } else if (Vector2.Distance(transform.position, player.position) < retreatDistance){

             transform.position = Vector2.MoveTowards(transform.position, player.position, -speed * 
 Time.deltaTime);
         }


     }
 }`

我还没有添加射击部分,所以当我运行游戏敌人时,如果您尝试移动敌人,则将脚本应用到传送到地形外的位置,而游戏仍在进行中沿着x轴或z轴,它只会沿x方向移动,然后沿y方向移动回到原始位置,但它会让您移动,但随后又返回其原始位置,请始终提供帮助,我可以使其正常工作。

1 个答案:

答案 0 :(得分:0)

以向量为单位要引起注意:较低维度的向量操作会“切除”多余的维度。

您的问题是Z完全不在方程?中。

您只需要使用Vector3类的方法即可,而不是Vector2。