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