Unity3d 将游戏对象旋转到玩家位置?

Unity3d 将游戏对象旋转到玩家位置?,unity3d,Unity3d,我正在制作一个2D游戏,我有一个预制的敌人,这个敌人是一门大炮。当玩家改变位置时,我要旋转这门大炮 大炮应始终旋转到玩家位置 我正在试这个 // Update is called once per frame void Update () { float distance = Vector2.Distance(player.position, transform.position); if(distance < 10){ Ve

我正在制作一个2D游戏,我有一个预制的敌人,这个敌人是一门大炮。当玩家改变位置时,我要旋转这门大炮

大炮应始终旋转到玩家位置

我正在试这个

// 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,现在可以了!!谢谢