#31 Assault mode change with camera

This commit is contained in:
M1_IDMhan 2023-09-20 01:58:52 +09:00
parent 59233a4f13
commit ead1f1c1ab
27 changed files with 2692 additions and 296 deletions

File diff suppressed because it is too large Load Diff

View File

@ -18,7 +18,7 @@ namespace BlueWaterProject
public int rotateSpeed = 10;
[Required("습격모드 카메라를 넣어주세요.")]
public CinemachineVirtualCamera assaultCam;
[field: SerializeField] public CinemachineFreeLook AssaultCam { get; set; }
[Required("보트내부 카메라를 넣어주세요.")]
public CinemachineVirtualCamera inShipCam;
@ -45,11 +45,12 @@ namespace BlueWaterProject
{
TakeCamMovement();
DredgeCamRotate();
AssaultCamRotate();
}
public void CamAssaultMode()
{
assaultCam.Priority = 1;
AssaultCam.Priority = 1;
dredgeCam.Priority = 0;
inShipCam.Priority = 0;
}
@ -57,7 +58,7 @@ namespace BlueWaterProject
public void CamDredgeMode()
{
dredgeCam.Priority = 1;
assaultCam.Priority = 0;
AssaultCam.Priority = 0;
inShipCam.Priority = 0;
}
@ -65,7 +66,7 @@ namespace BlueWaterProject
{
inShipCam.Priority = 1;
dredgeCam.Priority = 0;
assaultCam.Priority = 0;
AssaultCam.Priority = 0;
}
private void TakeCamMovement()
@ -92,7 +93,7 @@ namespace BlueWaterProject
Quaternion.Euler(takeAimCam.transform.rotation.eulerAngles.x, yRotation, takeAimCam.transform.rotation.eulerAngles.z);
}
public void DredgeCamRotate()
private void DredgeCamRotate()
{
if (Input.GetMouseButtonDown(1))
{
@ -109,5 +110,33 @@ namespace BlueWaterProject
dredgeCamOrbitalTransposer.m_RecenterToTargetHeading.m_enabled = true;
}
}
private void AssaultCamRotate()
{
if (Input.GetMouseButtonDown(1))
{
//AssaultCam의 X Axis의 Speed를 변경
AssaultCam.m_XAxis.m_MaxSpeed = 150;
AssaultCam.m_XAxis.m_InputAxisName = "Mouse X";
//AssaultCam의 Y Axis의 Speed를 변경
AssaultCam.m_YAxis.m_MaxSpeed = 2;
AssaultCam.m_YAxis.m_InputAxisName = "Mouse Y";
AssaultCam.m_RecenterToTargetHeading.m_enabled = false;
}
else if (Input.GetMouseButtonUp(1))
{
//AssaultCam의 X Axis의 Speed를 원래대로
AssaultCam.m_XAxis.m_MaxSpeed = 0;
AssaultCam.m_XAxis.m_InputAxisName = "";
//AssaultCam의 Y Axis의 Speed를 원래대로
AssaultCam.m_YAxis.m_MaxSpeed = 0;
AssaultCam.m_YAxis.m_InputAxisName = "";
AssaultCam.m_RecenterToTargetHeading.m_enabled = true;
}
}
}
}

View File

@ -1,4 +1,5 @@
using System.Collections.Generic;
using Cinemachine;
using Sirenix.OdinInspector;
using UnityEngine;
@ -19,6 +20,8 @@ namespace BlueWaterProject
[field: SerializeField] public List<Transform> TargetAllList { get; private set; }
[field: SerializeField] public CinemachineFreeLook IslandCam { get; private set; }
public IslandInfo()
{
IslandName = null;
@ -26,15 +29,17 @@ namespace BlueWaterProject
UnitList = null;
EnemyList = null;
TargetAllList = null;
IslandCam = null;
}
public IslandInfo(string islandName, List<Transform> houseList, List<EnemyUnit> unitList, List<Transform> enemyList, List<Transform> targetAllList)
public IslandInfo(string islandName, List<Transform> houseList, List<EnemyUnit> unitList, List<Transform> enemyList, List<Transform> targetAllList, CinemachineFreeLook islandCam)
{
IslandName = islandName;
HouseList = houseList;
UnitList = unitList;
EnemyList = enemyList;
TargetAllList = targetAllList;
IslandCam = islandCam;
}
#endregion
@ -109,6 +114,8 @@ namespace BlueWaterProject
{
TargetAllList.Add(house);
}
IslandCam = transform.Find("IslandCam").GetComponent<CinemachineFreeLook>();
}
public void RemoveListElement(List<Transform> list, Transform element)

View File

@ -45,25 +45,45 @@ namespace BlueWaterProject
[field: SerializeField]
public List<Canon> Canons { get; private set; } = new (GlobalValue.MAX_CANON_COUNT);
public bool IsAssaultMode { get; set; }
public bool IsInShipMode { get; set; }
public bool IsDredgeMode { get; set; }
public bool IsTakeAim { get; set; }
[field: Title("Mode")]
[field: SerializeField] public bool IsAssaultMode { get; set; }
[field: SerializeField] public bool IsInShipMode { get; set; }
[field: SerializeField] public bool IsDredgeMode { get; set; }
[field: SerializeField] public bool IsTakeAim { get; set; }
[Title("Interaction")]
public bool IsIslandInteraction { get; set; }
private float rayLength;
private LayerMask groundLayer;
private void Init()
{
character = transform.Find("Character").gameObject;
rb = GetComponent<Rigidbody>();
GetComponentsInChildren(Canons);
rayLength = 15f;
groundLayer = LayerMask.GetMask("Ground");
}
#region Unity Function
private void OnDrawGizmosSelected()
{
Gizmos.color = Color.red;
Gizmos.DrawWireSphere(transform.position, GlobalValue.RADAR_RANGE);
}
private void Awake()
{
Init();
}
private void Start()
{
SwitchDredgeMode(true);
}
private void FixedUpdate()
{
HandleMovement();
@ -74,6 +94,7 @@ namespace BlueWaterProject
FindInRadarRange();
FilterInCameraObjects();
LookAtTarget();
Raycast8Direction();
}
#endregion
@ -119,6 +140,12 @@ namespace BlueWaterProject
}
}
private void StopShipMovement()
{
rb.velocity = Vector3.zero;
rb.angularVelocity = Vector3.zero;
}
#endregion
#region AssaultMode/DreadgeMode Switch
@ -134,6 +161,7 @@ namespace BlueWaterProject
{
SwitchTakeAim(false);
SwitchInShipMode(false);
SwitchDredgeMode(false);
GameManager.Inst.CameraController.CamAssaultMode();
UiManager.Inst.CardLayoutGroupAnimator.Play();
IsAssaultMode = true;
@ -145,6 +173,22 @@ namespace BlueWaterProject
IsAssaultMode = false;
}
}
private void SwitchDredgeMode(bool isOn)
{
if (isOn)
{
SwitchTakeAim(false);
SwitchAssaultMode(false);
SwitchInShipMode(false);
GameManager.Inst.CameraController.CamDredgeMode();
IsDredgeMode = true;
}
else if (IsDredgeMode)
{
IsDredgeMode = false;
}
}
#endregion
@ -172,13 +216,15 @@ namespace BlueWaterProject
private void OnInteraction(InputValue value) //F
{
if (!IsIslandInteraction) return;
SwitchAssaultMode(true);
UiManager.Inst.DefaultInteractionOnOff(false);
StopShipMovement();
}
private void OnInteractionHold(InputValue value) //F Hold
{
SwitchInShipMode(!IsInShipMode);
}
private void SwitchInShipMode(bool isOn)
@ -187,6 +233,7 @@ namespace BlueWaterProject
{
SwitchTakeAim(false);
SwitchAssaultMode(false);
SwitchDredgeMode(false);
GameManager.Inst.CameraController.CamInShipMode();
IsInShipMode = true;
}
@ -217,6 +264,7 @@ namespace BlueWaterProject
{
SwitchAssaultMode(false);
SwitchInShipMode(false);
SwitchDredgeMode(false);
GameManager.Inst.CameraController.CamTakeAim(true);
Cursor.visible = false;
Cursor.lockState = CursorLockMode.Locked;
@ -288,5 +336,54 @@ namespace BlueWaterProject
}
#endregion
#region Raycast 8 Direction
private void Raycast8Direction()
{
if (!IsDredgeMode) return;
Vector3[] directions =
{
transform.forward,
-transform.forward,
transform.right,
-transform.right,
transform.forward + transform.right,
transform.forward - transform.right,
-transform.forward + transform.right,
-transform.forward - transform.right
};
Vector3 halfExtents = new Vector3(5, 5, 5); // 박스 크기의 절반을 나타내는 벡터값을 설정합니다.
var isOn = false;
foreach (Vector3 dir in directions)
{
RaycastHit hit;
if (Physics.BoxCast(transform.position, halfExtents, dir, out hit, Quaternion.identity, rayLength, groundLayer))
{
isOn = true;
var islandInfo = hit.transform.parent.parent.GetComponent<IslandInfo>();
if (GameManager.Inst.CameraController.AssaultCam != islandInfo.IslandCam)
GameManager.Inst.CameraController.AssaultCam = islandInfo.IslandCam;
// 박스가 Ground 레이어에 닿았을 때 빨간색으로 표시
Debug.DrawRay(transform.position, dir * rayLength, Color.red);
IsIslandInteraction = true;
break;
}
// 박스가 Ground 레이어에 닿지 않았을 때 녹색으로 표시
Debug.DrawRay(transform.position, dir * rayLength, Color.green);
IsIslandInteraction = false;
}
UiManager.Inst.DefaultInteractionOnOff(isOn);
}
#endregion
}
}

View File

@ -29,6 +29,9 @@ namespace BlueWaterProject
[Title("Enemy Marker")]
private Image enemyMarker; // 적을 표시할 마커 (Image)
private Transform enemyTarget; // 타겟 (적)
[Title("InteractionUI")]
private Transform defaultInteraction;
private void Init()
@ -44,6 +47,8 @@ namespace BlueWaterProject
enemyMarker = transform.Find("EnemyMarker").GetComponent<Image>();
enemyMarker.sprite = DataManager.Inst.enemyMarker;
defaultInteraction = transform.Find("DefaultInteraction");
}
protected override void OnAwake()
@ -163,5 +168,10 @@ namespace BlueWaterProject
{
radar.gameObject.SetActive(isOn);
}
public void DefaultInteractionOnOff(bool isOn)
{
defaultInteraction.gameObject.SetActive(isOn);
}
}
}

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: a55ee4efaad27d948ba5f03fc6d7bc80
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: ed9b95dc6ed6d0647ad7f1a8f305385d
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 4ff1f29eab234cf4490d9bb383892c44
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: f5789d13135b86645a366dac6583d1cd
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 3643c0d76ec153646b1203880bfb64ed
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 3d7c4217783978e4abe6496ac71eee94
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 697b6e7dea1fde146b7e3e5cf3ed9e9f
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 078b8f13a17171b49892ad10426d5af0
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: f9406a33814af9c47b352e77f079d798
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 9aacf6f3043624194bb6f6fe9a580786
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: f4227764308e84f89a765fbf315e2945
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 41e59f562b69648719f2424c438758f3
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: b044a2387a61dac41bdf204adffdce9d
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: cd287c84e887ea24a8679e67aac7c074
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 5f3f53ee059b45a4d9a5b9fc75e8aea9
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: f211254f5bfad224ba88868f2c75432c
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 4368c9be31b3c174dbfd80f2caf98889
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 617b3f1032a08c14ebfedfa340767cdf
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: f597f19f656ba56eae4f6a3a7cc528f4
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 48e08dc33330d11e9d4a1b246c52e4f6
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: ed09910c0094cb27be8f3ca264680da3
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: cc355dd4cf1e6173beaeb22c2858cbe1
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant: