OldBlueWater/BlueWater/Assets/02.Scripts/OceanCamera.cs
NTG 278868a690 #Closes #101 #102 #103 #111 #117 #118
+ 부스터 사용시 집중선(SpeedLines) 기능 추가
+ 부스터 사용시 카메라 흔들림 효과 기능 추가
+ 부스터 사용시 포스트프로세싱(Vignette) 기능 추가
+ 부스터 소진시 내부적인 추가 부스터 시간 추가
+ 추가 부스터까지 소진시 부스터 쿨타임 적용
  ㄴ 기존의 이동속도보다 2배 느려지는 기능 추가
+ ShipPlayer(배) 모델링 변경
  ㄴ Hand_Painted_Boats(에셋 이름)
+ 배 변경에 따른 대포(Cannon) 변경 및 로직 수정
  ㄴ 대포의 발사 각도 변경
  ㄴ 대포의 스피드 변경
+ 배의 움직임 로직 변경
  ㄴ 일정한 속도로 회전
  ㄴ Rigidbody Freeze Rotation
+ 중형 물고기 모델링 추가
  ㄴ HammerHeadShark(망치머리상어) 추가
  ㄴ Stingray(가오리) 추가

+ Layer(PostProcessing) 추가
+ VisualFeedbackManager에 포스트 프로세싱 기능 관련 추가
2024-01-15 02:24:48 +09:00

118 lines
3.7 KiB
C#

using System.Collections;
using System.Collections.Generic;
using Cinemachine;
using Sirenix.OdinInspector;
using UnityEngine;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
public class OceanCamera : MonoBehaviour
{
[Title("초기화 방식")]
[SerializeField] private bool autoInit = true;
[field: Title("카메라")]
[field: SerializeField] public CinemachineVirtualCamera BaseShipCam { get; private set; }
private List<CinemachineVirtualCamera> cineCamList;
private GameObject cineCams;
private CinemachineFramingTransposer framingTransposer;
private Coroutine distanceCoroutine;
private float defaultDistance;
private const int CINE_CAM_NUM = 1;
private void Awake()
{
if (autoInit)
{
Init();
}
CameraManager.Inst.OceanCamera = this;
CameraManager.Inst.MainCam = Camera.main;
}
[Button("셋팅 초기화")]
private void Init()
{
cineCams = GameObject.Find("CineCameras");
if (!cineCams)
{
Debug.LogError("cineCams is null error");
return;
}
BaseShipCam = cineCams.transform.Find("BaseShipCam")?.GetComponent<CinemachineVirtualCamera>();
if (!BaseShipCam)
{
Debug.LogError("BaseShipCam is null error");
return;
}
framingTransposer = BaseShipCam.GetCinemachineComponent<CinemachineFramingTransposer>();
defaultDistance = framingTransposer.m_CameraDistance;
cineCamList = new List<CinemachineVirtualCamera>(CINE_CAM_NUM)
{
BaseShipCam
};
foreach (var cam in cineCamList)
{
cam.Priority = 0;
}
BaseShipCam.Priority = 1;
CameraManager.Inst.MainCam = Camera.main;
}
public void ChangeDistance(float addDistance, float time)
{
if (distanceCoroutine != null)
{
StopCoroutine(distanceCoroutine);
}
distanceCoroutine = StartCoroutine(ChangeDistanceCoroutine(addDistance, time));
}
private IEnumerator ChangeDistanceCoroutine(float addDistance, float time)
{
var changeDistance = framingTransposer.m_CameraDistance + addDistance;
var updateTime = 0f;
while (updateTime < time)
{
updateTime += Time.deltaTime;
framingTransposer.m_CameraDistance = Mathf.Lerp(framingTransposer.m_CameraDistance,
changeDistance, updateTime / time);
yield return null;
}
yield return null;
}
public void DefaultDistance(float time)
{
if (distanceCoroutine != null)
{
StopCoroutine(distanceCoroutine);
}
distanceCoroutine = StartCoroutine(DefaultDistanceCoroutine(time));
}
private IEnumerator DefaultDistanceCoroutine(float time)
{
var updateTime = 0f;
while (updateTime < time)
{
updateTime += Time.deltaTime;
framingTransposer.m_CameraDistance = Mathf.Lerp(framingTransposer.m_CameraDistance,
defaultDistance, updateTime / time);
yield return null;
}
framingTransposer.m_CameraDistance = defaultDistance;
yield return null;
}
}
}