소스 검색

箭测试demo

lvjincheng 4 년 전
부모
커밋
df0891c149
3개의 변경된 파일422개의 추가작업 그리고 602개의 파일을 삭제
  1. 387 586
      Assets/BowArrow/Scenes/Game.unity
  2. 23 10
      Assets/BowArrow/Scripts/Debug/GameDebug.cs
  3. 12 6
      Assets/BowArrow/Scripts/Game/Arrow.cs

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 387 - 586
Assets/BowArrow/Scenes/Game.unity


+ 23 - 10
Assets/BowArrow/Scripts/Debug/GameDebug.cs

@@ -5,8 +5,8 @@ using UnityEngine.UI;
 
 public class GameDebug : MonoBehaviour
 {
-    [SerializeField] Slider speedSlider;
-    [SerializeField] Slider distanceSlider;
+    [SerializeField] InputField speedInput;
+    [SerializeField] InputField distanceInput;
     [SerializeField] Text absoluteAngleText;
     [SerializeField] InputField offsetAngleInput;
     [SerializeField] Text logText;
@@ -23,8 +23,10 @@ public class GameDebug : MonoBehaviour
     void Start() 
     {
         BowCamera.ins.enabled = false;
-        onSlider();
-        onSlider1();
+        speedInput.onEndEdit.AddListener(onSpeedInput);
+        distanceInput.onEndEdit.AddListener(onDistanceInput);
+        onSpeedInput(null);
+        onDistanceInput(null);
         loaded = true;
         caluculateAbsoluteAngle();
         //增加射程卡
@@ -35,18 +37,29 @@ public class GameDebug : MonoBehaviour
         LoginMgr.myUserInfo.bagList.Add(propInfo);
     }
 
-    public void onSlider() 
+    public void onSpeedInput(string s) 
     {
-        float value = speedSlider.value;
-        speedSlider.GetComponentInChildren<Text>().text = "发射速度 " + (value).ToString("#0.00") + "m/s";
+        float value = 60;
+        try {
+            value = float.Parse(speedInput.text);
+        } catch (System.Exception) {
+            Log("发射速度解析错误\n已重置为默认值");
+        }
         Arrow.speed = GameMgr.RealSizeToGameSize(value);
         caluculateAbsoluteAngle();
     }
 
-    public void onSlider1() 
+    public void onDistanceInput(string s) 
     {
-        float value = distanceSlider.value;
-        distanceSlider.GetComponentInChildren<Text>().text = "靶心距离 " + (value).ToString("#0.00") + "m";
+        float value = 50;
+        try {
+            value = float.Parse(distanceInput.text);
+        } catch (System.Exception) {
+            Log("靶心距离解析错误\n已重置为默认值");
+        }
+        if (value < 10 || value > 70) {
+            Log("靶心距离超出范围\n超出合法区间");
+        }
         TargetBody target = GameObject.Find("GameArea/010").GetComponentInChildren<TargetBody>();
         target.SetDistance(value);
         caluculateAbsoluteAngle();

+ 12 - 6
Assets/BowArrow/Scripts/Game/Arrow.cs

@@ -64,19 +64,25 @@ public class Arrow : MonoBehaviour
         float maxAngleX = 5;
         if (!hasParabolaAngle) return;
         float absoluteAngleX = parabolaAngleInRadian / Mathf.PI * 180;
-        if (absoluteAngleX > maxAngleX) return;
-
+        if (absoluteAngleX > maxAngleX) {
+            absoluteAngleX = maxAngleX;
+        }
         float finalAngleX = absoluteAngleX + this.offsetAngle;
         float vy = Mathf.Sin(finalAngleX / 180 * Mathf.PI) * this.mySpeed;
         float vx = Mathf.Cos(finalAngleX / 180 * Mathf.PI) * this.mySpeed;
-        float deltaX = Mathf.Sqrt(Mathf.Pow(absoluteRay.point.x, 2) + Mathf.Pow(absoluteRay.point.z, 2));
+        float deltaX = Mathf.Sqrt(
+            Mathf.Pow(absoluteRay.point.x - this.shootOutPosition.x, 2) + 
+            Mathf.Pow(absoluteRay.point.z - this.shootOutPosition.z, 2)
+        );
+        float deltaY = absoluteRay.point.y - this.shootOutPosition.y;
         float tx = deltaX / vx;
-        float dy = vy * tx + 0.5f * Physics.gravity.y * tx * tx;
-        Debug.Log(dy);
-        if (Mathf.Abs(dy) < 0.62f) {
+        float finalDeltaY = vy * tx + 0.5f * Physics.gravity.y * tx * tx;
+        float dy = finalDeltaY - deltaY;
+        if (Mathf.Abs(dy) < 0.62f) { //再靶子范围内,则用update运算物理
             finalPoint = absoluteRay.point;
             finalPoint.y += dy;
             useUpdatePhysics = true;
+            parabolaAngleInRadian = finalAngleX / 180 * Mathf.PI;
             RandomUseSideCamera();
         } else {
             Vector3 eulerAngle = this.transform.eulerAngles;

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.