Commit 255c8a17 authored by 18손재민's avatar 18손재민

플레이어 발사 모드 시 시점 전환 구현

parent b9146741
fileFormatVersion: 2
guid: 4ea1f6c8373c4484faa04e687403d543
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
...@@ -10,6 +10,9 @@ public class CameraController : MonoBehaviour ...@@ -10,6 +10,9 @@ public class CameraController : MonoBehaviour
Vector3 previousAngle; Vector3 previousAngle;
float shootingFov = 60f; float shootingFov = 60f;
float mapFov = 40f; float mapFov = 40f;
float rotationX = 0;
float rotationY = 0;
float sensitivity = 30;
Vector3 centerPos = new Vector3(0, 0, 0); Vector3 centerPos = new Vector3(0, 0, 0);
/// <summary> /// <summary>
...@@ -54,18 +57,25 @@ public class CameraController : MonoBehaviour ...@@ -54,18 +57,25 @@ public class CameraController : MonoBehaviour
{ {
float startTime = Time.time; float startTime = Time.time;
Vector3 posDiff = (player.head.transform.position - transform.position) / 40; Vector3 posDiff = (player.head.transform.position - transform.position) / 40;
Vector3 angleDiff = (player.head.transform.eulerAngles - transform.eulerAngles) / 40;
float fovDiff = (shootingFov - mapFov) / 40f; float fovDiff = (shootingFov - mapFov) / 40f;
float angleDiff = -30f / 40f;
PlayerController.inst.isZooming = true;
previousPos = transform.position; previousPos = transform.position;
previousAngle = transform.eulerAngles; previousAngle = new Vector3(transform.eulerAngles.x > 180 ? transform.eulerAngles.x - 360 : transform.eulerAngles.x,
transform.eulerAngles.y > 180 ? transform.eulerAngles.y - 360 : transform.eulerAngles.y,
transform.eulerAngles.z > 180 ? transform.eulerAngles.z - 360 : transform.eulerAngles.z);
for (int i = 0; i < 40; i++) for (int i = 0; i < 40; i++)
{ {
yield return null; yield return null;
transform.position += posDiff; transform.position += posDiff;
transform.eulerAngles += angleDiff; transform.eulerAngles += new Vector3(angleDiff, 0, 0);
Camera.main.fieldOfView += fovDiff; Camera.main.fieldOfView += fovDiff;
} }
player.transform.eulerAngles = new Vector3(player.transform.eulerAngles.x, transform.eulerAngles.y, player.transform.eulerAngles.z);
transform.position = player.head.transform.position; transform.position = player.head.transform.position;
rotationX = transform.eulerAngles.y;
rotationY = transform.eulerAngles.x;
PlayerController.inst.isZooming = false;
} }
/// <summary> /// <summary>
/// Zoom out from player. /// Zoom out from player.
...@@ -75,8 +85,19 @@ public class CameraController : MonoBehaviour ...@@ -75,8 +85,19 @@ public class CameraController : MonoBehaviour
{ {
float startTime = Time.time; float startTime = Time.time;
Vector3 posDiff = (previousPos - transform.position) / 40; Vector3 posDiff = (previousPos - transform.position) / 40;
Vector3 angleDiff = (previousAngle - transform.eulerAngles) / 40;
float fovDiff = (mapFov - shootingFov) / 40f; float fovDiff = (mapFov - shootingFov) / 40f;
PlayerController.inst.isZooming = true;
Vector3 tempAngle = new Vector3(transform.eulerAngles.x > 180 ? transform.eulerAngles.x - 360 : transform.eulerAngles.x,
transform.eulerAngles.y > 180 ? transform.eulerAngles.y - 360 : transform.eulerAngles.y,
transform.eulerAngles.z > 180 ? transform.eulerAngles.z - 360 : transform.eulerAngles.z);
Vector3 angleDiff = (previousAngle - tempAngle) / 40;
angleDiff = new Vector3(angleDiff.x > 180 ? 360 - angleDiff.x : angleDiff.x,
angleDiff.y > 180 ? 360 - angleDiff.y : angleDiff.y,
angleDiff.z > 180 ? 360 - angleDiff.z : angleDiff.z);
Debug.Log(previousAngle + "previousAngle");
Debug.Log(tempAngle + "tempAngle");
Debug.Log(angleDiff + "angleDiff");
for (int i = 0; i < 40; i++) for (int i = 0; i < 40; i++)
{ {
yield return null; yield return null;
...@@ -86,6 +107,7 @@ public class CameraController : MonoBehaviour ...@@ -86,6 +107,7 @@ public class CameraController : MonoBehaviour
} }
transform.position = previousPos; transform.position = previousPos;
PlayerController.inst.isPlayerShooting = false; PlayerController.inst.isPlayerShooting = false;
PlayerController.inst.isZooming = false;
} }
// Start is called before the first frame update // Start is called before the first frame update
...@@ -95,15 +117,25 @@ public class CameraController : MonoBehaviour ...@@ -95,15 +117,25 @@ public class CameraController : MonoBehaviour
transform.eulerAngles = new Vector3(30, transform.eulerAngles.y, transform.eulerAngles.z); transform.eulerAngles = new Vector3(30, transform.eulerAngles.y, transform.eulerAngles.z);
} }
// Update is called once per frame // Update is called once per frame
void Update() void Update()
{ {
if (!PlayerController.inst.isPlayerShooting) if (!PlayerController.inst.isZooming)
{ {
//CameraMove(); if (!PlayerController.inst.isPlayerShooting)
CameraDrag(); {
//CameraMove();
CameraDrag();
}
else
{
float mouseMoveValueX = Input.GetAxis("Mouse X");
float mouseMoveValueY = Input.GetAxis("Mouse Y");
rotationX += mouseMoveValueX * sensitivity * Time.deltaTime;
rotationY += mouseMoveValueY * sensitivity * Time.deltaTime;
rotationY = Mathf.Clamp(rotationY, -50, 20);
transform.eulerAngles = new Vector3(-rotationY, rotationX, 0);
}
} }
} }
......
...@@ -9,6 +9,7 @@ public class PlayerController : SingletonBehaviour<PlayerController> ...@@ -9,6 +9,7 @@ public class PlayerController : SingletonBehaviour<PlayerController>
public Player currentPlayer; public Player currentPlayer;
public bool isPlayerMoving; public bool isPlayerMoving;
public bool isPlayerShooting; public bool isPlayerShooting;
public bool isZooming;
private Vector2Int prePos; private Vector2Int prePos;
public Vector2Int MapPos public Vector2Int MapPos
{ {
...@@ -39,34 +40,37 @@ public class PlayerController : SingletonBehaviour<PlayerController> ...@@ -39,34 +40,37 @@ public class PlayerController : SingletonBehaviour<PlayerController>
prePos = MapPos; prePos = MapPos;
} }
if (Input.GetMouseButtonDown(0) && !isPlayerMoving && !isPlayerShooting) if (!isZooming)
{
Ray mouseRay = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(mouseRay, out hit) && hit.collider.gameObject.tag.Equals("Player"))
{
if (currentPlayer != null)
currentPlayer.ResetCurrentPlayer();
currentPlayer = hit.transform.gameObject.GetComponent<Player>();
StartCoroutine(currentPlayer.SetCurrentPlayer());
StartCoroutine(currentPlayer.CountPlayerClick(Time.time));
Debug.Log(hit.collider.gameObject.tag);
}
else if (Physics.Raycast(mouseRay, out hit) && hit.collider.gameObject.tag.Equals("floor"))
{
if (currentPlayer != null)
currentPlayer.MovePlayer(hit.collider.gameObject.transform.position);
Debug.Log(hit.collider.gameObject.tag);
}
else if (hit.collider == null)
{
if (currentPlayer != null)
currentPlayer.ResetCurrentPlayer();
}
}
else if (Input.GetMouseButtonDown(1) && isPlayerShooting)
{ {
StartCoroutine(Camera.main.GetComponent<CameraController>().ZoomOutFromPlayer()); if (Input.GetMouseButtonDown(0) && !isPlayerMoving && !isPlayerShooting)
{
Ray mouseRay = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(mouseRay, out hit) && hit.collider.gameObject.tag.Equals("Player"))
{
if (currentPlayer != null)
currentPlayer.ResetCurrentPlayer();
currentPlayer = hit.transform.gameObject.GetComponent<Player>();
StartCoroutine(currentPlayer.SetCurrentPlayer());
StartCoroutine(currentPlayer.CountPlayerClick(Time.time));
Debug.Log(hit.collider.gameObject.tag);
}
else if (Physics.Raycast(mouseRay, out hit) && hit.collider.gameObject.tag.Equals("floor"))
{
if (currentPlayer != null)
currentPlayer.MovePlayer(hit.collider.gameObject.transform.position);
Debug.Log(hit.collider.gameObject.tag);
}
else if (hit.collider == null)
{
if (currentPlayer != null)
currentPlayer.ResetCurrentPlayer();
}
}
else if (Input.GetMouseButtonDown(1) && isPlayerShooting)
{
StartCoroutine(Camera.main.GetComponent<CameraController>().ZoomOutFromPlayer());
}
} }
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment