我正在创建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方向移动回到原始位置,但它会让您移动,但随后又返回其原始位置,请始终提供帮助,我可以使其正常工作。
答案 0 :(得分:0)
以向量为单位要引起注意:较低维度的向量操作会“切除”多余的维度。
您的问题是Z完全不在方程?中。
您只需要使用Vector3类的方法即可,而不是Vector2。