【Unity】改變向量的方向而不改變其大小


最近在做一個打磚塊游戲時遇到一個小問題,就是小球有可能會在左右兩個邊界之間做循環往返運動而導致游戲無法繼續進行下去,於是我打算讓小球在垂直撞向邊界時改變一下方向,但是速度不變,嘗試了一些方法但是沒有達到效果。后來想到,速度是一個向量,問題就變成了改變一個向量的方向而不改變它的大小,Google一下找到了這個旋轉矩陣Wiki頁面。
雖然游戲是3D的但是只是在一個平面上運動,所以只需要下面這個旋轉矩陣
2D旋轉矩陣

用原向量矩陣[x,y]乘以旋轉矩陣
矩陣外積,左行乘右列
代碼如下

    /// <summary>
    /// 旋轉向量,使其方向改變,大小不變
    /// </summary>
    /// <param name="v">需要旋轉的向量</param>
    /// <param name="angle">旋轉的角度</param>
    /// <returns>旋轉后的向量</returns>
  private Vector2 RotationMatrix(Vector2 v, float angle) {
        var x = v.x;
        var y = v.y;
        var sin = Math.Sin(Math.PI * angle / 180);
        var cos = Math.Cos(Math.PI * angle / 180);
        var newX = x * cos + y * sin;
        var newY = x * -sin + y * cos;
        return new Vector2((float)newX, (float)newY);
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM