敌人机器人远离玩家 Unity3D
Enemy bot moves away from the player Unity3D
我正在制作自上而下的射击游戏。我写了代码,让敌人在地图上随机生成,他们正试图抓住你。我让他们这样做,我还写了一段代码让他们看着你。基本上只在 Z 轴上向你旋转。但问题是,当它们在玩家右侧生成时,敌人正在远离玩家。但如果我旋转并开始移动,它们就会试图修复自己。这是我的脚本:
void FixedUpdate () {
Vector3 difference = player.position - transform.position;
float rotationZ = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0.0f, 0.0f, rotationZ);
Vector2 toTarget = player.transform.position - transform.position;
float speed = 1.5f;
transform.Translate(toTarget * speed * Time.deltaTime);
}
认为 Translate
是相对修饰符。因此,当您在 Translate 本身中指定方向时,运动会变得混乱。使用Vector3.MoveTowards
解决问题。如果你的游戏是 2D 的,你也可以像下面这样使用 Vector2
:
Vector2.MoveTowards(currentPosition, targetPosition, step);
您最好可以像这样修复此代码,并将 MoveTowards
的 return 值设置为 transform.Position
。
void FixedUpdate () {
Vector3 difference = player.position - transform.position;
float rotationZ = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0.0f, 0.0f, rotationZ);
float speed = 1.5f;
// replace Translate to MoveTowards
transform.position = Vector3.MoveTowards(transform.position, player.position, Time.deltaTime * speed);
}
我正在制作自上而下的射击游戏。我写了代码,让敌人在地图上随机生成,他们正试图抓住你。我让他们这样做,我还写了一段代码让他们看着你。基本上只在 Z 轴上向你旋转。但问题是,当它们在玩家右侧生成时,敌人正在远离玩家。但如果我旋转并开始移动,它们就会试图修复自己。这是我的脚本:
void FixedUpdate () {
Vector3 difference = player.position - transform.position;
float rotationZ = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0.0f, 0.0f, rotationZ);
Vector2 toTarget = player.transform.position - transform.position;
float speed = 1.5f;
transform.Translate(toTarget * speed * Time.deltaTime);
}
认为 Translate
是相对修饰符。因此,当您在 Translate 本身中指定方向时,运动会变得混乱。使用Vector3.MoveTowards
解决问题。如果你的游戏是 2D 的,你也可以像下面这样使用 Vector2
:
Vector2.MoveTowards(currentPosition, targetPosition, step);
您最好可以像这样修复此代码,并将 MoveTowards
的 return 值设置为 transform.Position
。
void FixedUpdate () {
Vector3 difference = player.position - transform.position;
float rotationZ = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0.0f, 0.0f, rotationZ);
float speed = 1.5f;
// replace Translate to MoveTowards
transform.position = Vector3.MoveTowards(transform.position, player.position, Time.deltaTime * speed);
}