Unity3d 将游戏对象旋转到玩家位置?
我正在制作一个2D游戏,我有一个预制的敌人,这个敌人是一门大炮。当玩家改变位置时,我要旋转这门大炮 大炮应始终旋转到玩家位置 我正在试这个Unity3d 将游戏对象旋转到玩家位置?,unity3d,Unity3d,我正在制作一个2D游戏,我有一个预制的敌人,这个敌人是一门大炮。当玩家改变位置时,我要旋转这门大炮 大炮应始终旋转到玩家位置 我正在试这个 // Update is called once per frame void Update () { float distance = Vector2.Distance(player.position, transform.position); if(distance < 10){ Ve
// Update is called once per frame
void Update () {
float distance = Vector2.Distance(player.position, transform.position);
if(distance < 10){
Vector2 dir = player.position - transform.position;
float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
Quaternion qto = Quaternion.AngleAxis(angle, Vector3.forward);
transform.rotation = Quaternion.Slerp(transform.rotation, qto, 5f * Time.deltaTime);
}
}
//每帧调用一次更新
无效更新(){
浮动距离=矢量2.距离(player.position,transform.position);
如果(距离<10){
Vector2 dir=player.position-transform.position;
浮动角度=数学Atan2(方向y,方向x)*数学Rad2Deg;
四元数qto=四元数角度轴(角度,矢量3向前);
transform.rotation=Quaternion.Slerp(transform.rotation,qto,5f*Time.deltaTime);
}
}
见结果:
大炮没有旋转到玩家的位置
如何解决此问题?您可以尝试以下代码:
float turnspeed=1.0f;
//set a turning speed
void Update ()
{
dir = player.position - transform.position;
dir.Normalize();
transform.rotation = Quaternion.Slerp(transform.rotation,Quaternion.LookRotation(dir), turnSpeed *Time.deltaTime);
}
您的代码很好,只需做一点小小的更改,您就可以开始了:
void Update () {
float distance = Vector2.Distance(player.position, transform.position);
if(distance < 10){
Vector2 dir = player.position - transform.position;
float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
Quaternion qto = Quaternion.AngleAxis(angle, Vector3.forward);
Quaternion qto2 = Quaternion.Euler (qto.eulerAngles.x,
qto.eulerAngles.y,
qto.eulerAngles.z + 90);
transform.rotation = Quaternion.Slerp(transform.rotation, qto2, 5f * Time.deltaTime);
}
}
void更新(){
浮动距离=矢量2.距离(player.position,transform.position);
如果(距离<10){
Vector2 dir=player.position-transform.position;
浮动角度=数学Atan2(方向y,方向x)*数学Rad2Deg;
四元数qto=四元数角度轴(角度,矢量3向前);
四元数qto2=四元数.Euler(qto.eulerAngles.x,
qto.eulerAngles.y,
数量级eulerAngles.z+90);
transform.rotation=Quaternion.Slerp(transform.rotation,qto2,5f*Time.deltaTime);
}
}
我只是将qto2和Slerp添加到其中。我不能使用
四元数。LookRotation()
因为这是一个2D游戏。非常好,我在qto2中将+90改为-90,现在可以了!!谢谢