|
|
@@ -26,8 +26,8 @@ public class CameraController : MonoBehaviour
|
|
|
public float minDistance = 20;
|
|
|
public float splitDistance = 30;
|
|
|
public float mergeDistance = 16;
|
|
|
- [HideInInspector]
|
|
|
- public float distance;
|
|
|
+ public float distanceX;
|
|
|
+ public float distanceY;
|
|
|
[HideInInspector]
|
|
|
public float ratio;
|
|
|
|
|
|
@@ -52,9 +52,76 @@ public class CameraController : MonoBehaviour
|
|
|
PlayerController player0 = PlayersInput.instance[0];
|
|
|
PlayerController player1 = PlayersInput.instance[1];
|
|
|
|
|
|
+ if(player0!= null && player0!=player1)
|
|
|
+ {
|
|
|
+
|
|
|
+ Vector3 player0Pos = player0.transform.position;
|
|
|
+ Vector3 player1Pos = player1.transform.position;
|
|
|
+ distanceX = Mathf.Abs(player0Pos.x - player1Pos.x);
|
|
|
+ distanceY = Mathf.Abs(player0Pos.y - player1Pos.y);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ if (distanceX < mergeDistance)
|
|
|
+ {
|
|
|
+ if(distanceY < mergeDistance/2)
|
|
|
+ {
|
|
|
+ if (isSplit)
|
|
|
+ {
|
|
|
+ CameraSplit(true);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ else if (distanceX > splitDistance)
|
|
|
+ {
|
|
|
+ if (!isSplit)
|
|
|
+ {
|
|
|
+ CameraSplit(false);
|
|
|
+ if (player0Pos.x < player1Pos.x)
|
|
|
+ {
|
|
|
+ player0Camera.rect = new Rect(0, 0, 0.5f, 1);
|
|
|
+ player1Camera.rect = new Rect(0.5f, 0, 0.5f, 1);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ player0Camera.rect = new Rect(0.5f, 0, 0.5f, 1);
|
|
|
+ player1Camera.rect = new Rect(0, 0, 0.5f, 1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (isSplit)
|
|
|
+ {
|
|
|
+ view = 0;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ view = Mathf.Clamp((distanceX - minDistance) * ratio, 0, maxView);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if (isSplit)
|
|
|
+ {
|
|
|
+ lineInCamera.transform.localScale = new Vector3(
|
|
|
+ Mathf.Clamp((distanceX - mergeDistance) * 0.01f, 0, lineMaxScale), 20, 1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ private void FixedUpdate()
|
|
|
+ {
|
|
|
+ PlayerController player0 = PlayersInput.instance[0];
|
|
|
+ PlayerController player1 = PlayersInput.instance[1];
|
|
|
if (player0 == null)
|
|
|
{
|
|
|
- targetPos = new Vector3(0, offsetY, offsetZ);
|
|
|
+ return;
|
|
|
}
|
|
|
else if (player1 == player0)
|
|
|
{
|
|
|
@@ -66,13 +133,17 @@ public class CameraController : MonoBehaviour
|
|
|
{
|
|
|
targetPos = CameraTargetMove(player0);
|
|
|
}
|
|
|
-
|
|
|
+ mainCamera.transform.position =
|
|
|
+ Vector3.Lerp(mainCamera.transform.position, targetPos, lerpValue * Time.deltaTime);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- if(player0.isRevive && player1.isRevive)
|
|
|
+ player0TargetPos = CameraTargetMove(player0);
|
|
|
+ player1TargetPos = CameraTargetMove(player1);
|
|
|
+ if (player0.isRevive && player1.isRevive)
|
|
|
{
|
|
|
- targetPos = new Vector3(140, offsetY, offsetZ);
|
|
|
+ player0TargetPos = new Vector3(140, offsetY, offsetZ);
|
|
|
+ player1TargetPos = new Vector3(140, offsetY, offsetZ);
|
|
|
if (isSplit)
|
|
|
{
|
|
|
CameraSplit(true);
|
|
|
@@ -81,7 +152,7 @@ public class CameraController : MonoBehaviour
|
|
|
}
|
|
|
else if (player0.isRevive)
|
|
|
{
|
|
|
- targetPos = CameraTargetMove(player1);
|
|
|
+ player0TargetPos = CameraTargetMove(player1);
|
|
|
if (isSplit)
|
|
|
{
|
|
|
CameraSplit(true);
|
|
|
@@ -90,87 +161,20 @@ public class CameraController : MonoBehaviour
|
|
|
}
|
|
|
else if (player1.isRevive)
|
|
|
{
|
|
|
- targetPos = CameraTargetMove(player0);
|
|
|
- if (isSplit)
|
|
|
- {
|
|
|
- CameraSplit(true);
|
|
|
- }
|
|
|
- return;
|
|
|
- }
|
|
|
- Vector3 player0Pos = player0.transform.position;
|
|
|
- Vector3 player1Pos = player1.transform.position;
|
|
|
- distance = Vector3.Distance(player0Pos, player1Pos);
|
|
|
-
|
|
|
- if (player0Pos.x < player1Pos.x)
|
|
|
- {
|
|
|
- player0TargetPos = CameraTargetMove(player0);
|
|
|
- //leftID = 0;
|
|
|
- player1TargetPos = CameraTargetMove(player1);
|
|
|
- //rightID = 1;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- player0TargetPos = CameraTargetMove(player1);
|
|
|
- //leftID = 1;
|
|
|
player1TargetPos = CameraTargetMove(player0);
|
|
|
- //rightID = 0;
|
|
|
- }
|
|
|
-
|
|
|
- view = Mathf.Clamp((distance - minDistance) * ratio, 0, maxView);
|
|
|
- if (distance < mergeDistance)
|
|
|
- {
|
|
|
if (isSplit)
|
|
|
{
|
|
|
CameraSplit(true);
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- lineInCamera.transform.localScale = new Vector3(Mathf.Clamp(
|
|
|
- (distance - mergeDistance) * 0.01f, 0, lineMaxScale), 10, 1);
|
|
|
- targetPos =
|
|
|
- Vector3.Lerp(player0Camera.transform.position, player1Camera.transform.position, 0.5f);
|
|
|
- }
|
|
|
- if (distance > splitDistance)
|
|
|
- {
|
|
|
- if (!isSplit)
|
|
|
- {
|
|
|
- CameraSplit(false);
|
|
|
}
|
|
|
+ return;
|
|
|
}
|
|
|
- else
|
|
|
- {
|
|
|
- targetPos =
|
|
|
- Vector3.Lerp(player0Pos, player1Pos, 0.5f) + new Vector3(0, offsetY, offsetZ);
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
- private void FixedUpdate()
|
|
|
- {
|
|
|
- if (PlayersInput.instance[1] == null)
|
|
|
- {
|
|
|
- mainCamera.transform.position =
|
|
|
- Vector3.Lerp(mainCamera.transform.position, targetPos, lerpValue * Time.deltaTime);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- if (lineInCamera.activeSelf)
|
|
|
- {
|
|
|
- cameraPos = targetPos;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- cameraPos = Vector3.Lerp(mainCamera.transform.position,
|
|
|
- targetPos, lerpValue * Time.deltaTime);
|
|
|
- }
|
|
|
-
|
|
|
- mainCamera.transform.position = new Vector3(cameraPos.x, cameraPos.y,offsetZ - view);
|
|
|
+
|
|
|
player0Camera.transform.position = Vector3.Lerp(player0Camera.transform.position,
|
|
|
player0TargetPos, lerpValue * 2 * Time.deltaTime);
|
|
|
player1Camera.transform.position = Vector3.Lerp(player1Camera.transform.position,
|
|
|
player1TargetPos, lerpValue * 2 * Time.deltaTime);
|
|
|
-
|
|
|
+ mainCamera.transform.position = Vector3.Lerp(player0Camera.transform.position,
|
|
|
+ player1Camera.transform.position, 0.5f) + Vector3.back * view;
|
|
|
}
|
|
|
|
|
|
}
|