Quellcode durchsuchen

更新其它准心方法修改

lvjincheng vor 3 Jahren
Ursprung
Commit
8903b24644
1 geänderte Dateien mit 16 neuen und 3 gelöschten Zeilen
  1. 16 3
      Assets/Test9Axis/MultipleCrossHair.cs

+ 16 - 3
Assets/Test9Axis/MultipleCrossHair.cs

@@ -6,10 +6,12 @@ using UnityEngine.UI;
 //多准心渲染姿态角-测试用
 public class MultipleCrossHair : MonoBehaviour
 {
+    public static MultipleCrossHair ins;
     List<RectTransform> crossHairList = new List<RectTransform>();
 
     void Start()
     {
+        ins = this;
         BowCamera.ins.onAfterLateUpdate += MyUpdate;
 
         crossHairList.Add(CreateNewCrossHair(Color.green));
@@ -20,12 +22,21 @@ public class MultipleCrossHair : MonoBehaviour
 
     void MyUpdate()
     {
-        UpdateCrossHairByRotation(crossHairList[0], Quaternion.identity);
-        UpdateCrossHairByRotation(crossHairList[0], Quaternion.identity);
+
+    }
+
+    public void UpdateCrossHairByRotation2(int crossHairIndex, Quaternion rotation)
+    {
+        RectTransform rectTF = crossHairList[crossHairIndex];
+        UpdateCrossHairByRotation(rectTF, rotation);
     }
 
-    public void UpdateCrossHairByRotation(RectTransform rectTF, Quaternion rotation)
+    void UpdateCrossHairByRotation(RectTransform rectTF, Quaternion rotation)
     {
+        //把z轴旋转弄成0
+        rotation = Quaternion.LookRotation(rotation * Vector3.forward);
+
+        //比率转化,边界限制
         Vector3 theAngles = rotation.eulerAngles;
         float bowRotateConvertRate = UserSettings.ins.bowRotateConvert.GetRate();
         theAngles.x = Mathf.Clamp((theAngles.x > 180 ? theAngles.x - 360 : theAngles.x) * bowRotateConvertRate,
@@ -33,8 +44,10 @@ public class MultipleCrossHair : MonoBehaviour
         theAngles.y = Mathf.Clamp((theAngles.y > 180 ? theAngles.y - 360 : theAngles.y) * bowRotateConvertRate,
             -80, 80);
 
+        //rotation参数看作本地四元组,还得根据游戏场景转成世界四元组
         Transform TF = BowCamera.ins.transform;
         Vector3 forward = GameMgr.ins.transform.rotation * (Quaternion.Euler(theAngles) * Vector3.forward);
+
         Ray ray = new Ray(TF.position, forward);
         RaycastHit hitInfo;
         Vector3 targetPosition;