问题是我不能制作一个使敌人旋转的脚本,以便“向上”指向玩家,(我的意思是它将通过transform.up来到玩家)我还没有找到任何工作解决方案,(从我能说的)
我正在尝试制作一个小型2D游戏,仅供我的朋友们玩。我试过的是让敌人看看玩家,然后将“z”旋转设置为与“x”旋转相同,然后重置“x”和“y”旋转(以便“向上”指向在球员)。但敌人直接上升。
using UnityEngine;
public class Enemy : MonoBehaviour
{
public Transform Player; // The Transform of the Player that you can controll
public float MoveSpeed = 4; // How fast the enemy should go
void FixedUpdate()
{
transform.LookAt(Player);
transform.rotation = Quaternion.Euler(transform.rotation.x, 0, transform.rotation.x);
transform.rotation = Quaternion.Euler(0, 0, transform.rotation.z);
transform.position += transform.up * MoveSpeed * Time.deltaTime;
}
}
所以我想要发生的是敌人将移动到玩家,但旋转部分不起作用,它只是在空中直接上升而不是跟随玩家。我可能只是愚蠢而错过了一些简单的事情......
通过使用
transform.rotation = Quaternion.Euler(transform.rotation.x, 0, transform.rotation.x);
transform.rotation = Quaternion.Euler(0, 0, transform.rotation.z);
两次你用新值覆盖旋转,另外将Euler(Vector3
)与Quaternion
场混合... transform.rotation.x
不是你在Unity检查器中看到的围绕X
轴的纯旋转。
这有点取决于你最终想要enemy
旋转到底,但你可以简单地使用Transform.RotateAround
transform.LookAt(Player);
transform.RotateAround(transform.position, transform.right, 90);
LookAt
默认导致旋转使得transform.forward
指向目标,transform.right
保持指向右(ish)并且transform.up
保持指向上方(ish)。所以你所要做的就是围绕当地的X轴transform.right
正好90°
旋转所以现在transform.forward
指向下而transform.up
指向目标。
结果
如果您还想要更改另一个轴,您还可以另外围绕局部transform.up
轴旋转它,例如翻转forward
矢量“向上”:
transform.LookAt(Player);
transform.RotateAround(transform.position, transform.right, 90);
transform.RotateAround(transform.position, transform.up, 180);
实际上有一个特殊的原因,你在FixedUpdate
而不是在Update
这样做? FixedUpdate
应该只用于物理相关的东西。