将GameObject旋转到玩家位置?

时间:2014-11-06 09:42:45

标签: unity3d

我正在创建一个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);
        }
    }

查看结果:https://www.youtube.com/watch?v=REeSNKWLvIQ

加农炮不会旋转到玩家位置。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您可以尝试以下代码:

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);                
}

答案 1 :(得分:1)

你的守则很好只做一个小改变而你很好去:

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);
    }
}

我只是添加qto2和Slerp。