LAPTOP-OM1V99U2\永远de小亡灵 vor 1 Jahr
Ursprung
Commit
f0b5480684
1 geänderte Dateien mit 80 neuen und 11 gelöschten Zeilen
  1. 80 11
      ActionTowerDefense/Assets/Scripts/CameraController.cs

+ 80 - 11
ActionTowerDefense/Assets/Scripts/CameraController.cs

@@ -5,45 +5,114 @@ using UnityEngine;
 public class CameraController : MonoBehaviour
 {
     public float offsetX = 6, offsetY = 3, offsetZ = -16;
+    public float splitOffsetX = 6, splitOffsetsY = 3, splitOffsetZ = -16;
     public float lerpValue = 3.5f;
 
     [HideInInspector]
     public Vector3 targetPos;
+    public Vector3 leftTargetPos;
+    public Vector3 rightTargetPos;
 
     public Camera mainCamera;
-    public GameObject cameras;
     public Camera leftCamera;
     public Camera rightCamera;
 
-    private void FixedUpdate()
+    public float minField = 55;
+    public float maxField = 75;
+    [HideInInspector]
+    public float field;
+    public float minDistance = 20;
+    public float splitDistance = 30;
+    public float mergeDistance = 16;
+    [HideInInspector]
+    public float distance;
+    [HideInInspector]
+    public float ratio;
+
+    private void Start()
+    {
+        ratio = (maxField - minField) / (splitDistance - minDistance);
+    }
+    private void Update()
     {
         if (PlayersInput.instance[0] == null)
         {
             targetPos = Vector3.zero + new Vector3(0, offsetY, offsetZ);
         }
-        else if(PlayersInput.instance[1] == null)
+        else if (PlayersInput.instance[1] == null)
         {
-            targetPos = CameraTargetMove(PlayersInput.instance[0]);
+            targetPos = CameraTargetMove(PlayersInput.instance[0], offsetX, offsetY,offsetZ);
         }
         else
         {
-            targetPos = Vector3.Lerp(PlayersInput.instance[0].transform.position,
-                PlayersInput.instance[1].transform.position, 0.5f) + new Vector3(0,offsetY,offsetZ);
+            Vector3 player0Pos = PlayersInput.instance[0].transform.position;
+            Vector3 player1Pos = PlayersInput.instance[1].transform.position;
+            distance = Vector3.Distance(player0Pos, player1Pos);
+            targetPos = (player0Pos + player1Pos)/2f + new Vector3(0, offsetY, offsetZ);
+            if (player0Pos.x < player1Pos.x)
+            {
+                leftTargetPos = CameraTargetMove(PlayersInput.instance[0],
+                    splitOffsetX,splitOffsetsY,splitOffsetZ);
+                rightTargetPos = CameraTargetMove(PlayersInput.instance[1],
+                    splitOffsetX, splitOffsetsY, splitOffsetZ);
+            }
+            else
+            {
+                leftTargetPos = CameraTargetMove(PlayersInput.instance[1],
+                    splitOffsetX, splitOffsetsY, splitOffsetZ);
+                rightTargetPos = CameraTargetMove(PlayersInput.instance[0],
+                    splitOffsetX, splitOffsetsY, splitOffsetZ);
+
+            }
+
+            field = Mathf.Clamp(minField + (distance - minDistance) * ratio, minField, maxField);
+            if (distance < mergeDistance)
+            {
+                mainCamera.enabled = true;
+                leftCamera.enabled = false;
+                rightCamera.enabled = false;
+            }
+            if(distance > splitDistance) 
+            {
+                mainCamera.enabled = false;
+                leftCamera.enabled = true;
+                rightCamera.enabled = true;
+            }
+
+        }
+    }
+    private void FixedUpdate()
+    {
+        if (PlayersInput.instance[1] == null)
+        {
+            mainCamera.transform.position =
+                Vector3.Lerp(mainCamera.transform.position, targetPos, lerpValue * Time.deltaTime);
         }
+        else
+        {
+            mainCamera.transform.position =
+                   Vector3.Lerp(mainCamera.transform.position, targetPos, lerpValue * Time.deltaTime);
+            leftCamera.transform.position = Vector3.Lerp(leftCamera.transform.position, 
+                leftTargetPos, lerpValue * Time.deltaTime);
+            rightCamera.transform.position = Vector3.Lerp(rightCamera.transform.position, 
+                rightTargetPos, lerpValue * Time.deltaTime);
+            mainCamera.fieldOfView = field;
 
-        transform.position = Vector3.Lerp(transform.position, targetPos, lerpValue * Time.deltaTime);
+        }
+        
     }
 
-    Vector3 CameraTargetMove(PlayerController player)
+    Vector3 CameraTargetMove(PlayerController player, float X, float Y,float Z)
     {
+        Vector3 skewPos;
         if (player.bodyTrans.localScale.x > 0)
         {
-            targetPos = player.transform.position + new Vector3(-offsetX, offsetY, offsetZ);
+            skewPos = player.transform.position + new Vector3(-X, Y, Z);
         }
         else
         {
-            targetPos = player.transform.position + new Vector3(offsetX, offsetY, offsetZ);
+            skewPos = player.transform.position + new Vector3(X, Y, Z);
         }
-        return targetPos;
+        return skewPos;
     }
 }