카메라 가속 기능 추가 #182

Merged
UVCXR merged 1 commits from pgd/20250626_1 into main 2025-06-27 09:07:15 +09:00
3 changed files with 43 additions and 31 deletions

View File

@@ -11,12 +11,12 @@ namespace RTG
{ {
private static readonly float _minMoveSpeed = 1e-1f; private static readonly float _minMoveSpeed = 1e-1f;
[SerializeField] private float _moveSpeed = 30.0f;
private float _moveSpeed = 6.0f; private float _moveFastSpeed = 60.0f;
[SerializeField] private float _accelerationRate = 0f;
private float _accelerationRate = 15.0f;
public float MoveSpeed { get { return _moveSpeed; } set { _moveSpeed = Mathf.Max(_minMoveSpeed, value); } } public float MoveSpeed { get { return _moveSpeed; } set { _moveSpeed = Mathf.Max(_minMoveSpeed, value); } }
public float MoveFastSpeed { get { return _moveFastSpeed; } set { _moveFastSpeed = Mathf.Max(_minMoveSpeed, value); } }
public float AccelerationRate { get { return _accelerationRate; } set { _accelerationRate = Mathf.Max(0.0f, value); } } public float AccelerationRate { get { return _accelerationRate; } set { _accelerationRate = Mathf.Max(0.0f, value); } }

View File

@@ -22,6 +22,10 @@ namespace RTG
[SerializeField] [SerializeField]
private float _perspStandardZoomSensitivity = 10.0f; private float _perspStandardZoomSensitivity = 10.0f;
[SerializeField] [SerializeField]
private float _orthoFastZoomSensitivity = 30.0f;
[SerializeField]
private float _perspFastZoomSensitivity = 30.0f;
[SerializeField]
private float _orthoSmoothZoomSensitivity = 5.0f; private float _orthoSmoothZoomSensitivity = 5.0f;
[SerializeField] [SerializeField]
private float _perspSmoothZoomSensitivity = 5.0f; private float _perspSmoothZoomSensitivity = 5.0f;
@@ -37,6 +41,8 @@ namespace RTG
public CameraZoomMode ZoomMode { get { return _zoomMode; } set { _zoomMode = value; } } public CameraZoomMode ZoomMode { get { return _zoomMode; } set { _zoomMode = value; } }
public float OrthoStandardZoomSensitivity { get { return _orthoStandardZoomSensitivity; } set { _orthoStandardZoomSensitivity = Mathf.Max(value, 1e-3f); } } public float OrthoStandardZoomSensitivity { get { return _orthoStandardZoomSensitivity; } set { _orthoStandardZoomSensitivity = Mathf.Max(value, 1e-3f); } }
public float PerspStandardZoomSensitivity { get { return _perspStandardZoomSensitivity; } set { _perspStandardZoomSensitivity = Mathf.Max(value, 1e-3f); } } public float PerspStandardZoomSensitivity { get { return _perspStandardZoomSensitivity; } set { _perspStandardZoomSensitivity = Mathf.Max(value, 1e-3f); } }
public float OrthoFastZoomSensitivity { get { return _orthoFastZoomSensitivity; } set { _orthoFastZoomSensitivity = Mathf.Max(value, 1e-3f); } }
public float PerspFastZoomSensitivity { get { return _perspFastZoomSensitivity; } set { _perspFastZoomSensitivity = Mathf.Max(value, 1e-3f); } }
public float OrthoSmoothZoomSensitivity { get { return _orthoSmoothZoomSensitivity; } set { _orthoSmoothZoomSensitivity = Mathf.Max(value, 1e-3f); } } public float OrthoSmoothZoomSensitivity { get { return _orthoSmoothZoomSensitivity; } set { _orthoSmoothZoomSensitivity = Mathf.Max(value, 1e-3f); } }
public float PerspSmoothZoomSensitivity { get { return _perspSmoothZoomSensitivity; } set { _perspSmoothZoomSensitivity = Mathf.Max(value, 1e-3f); } } public float PerspSmoothZoomSensitivity { get { return _perspSmoothZoomSensitivity; } set { _perspSmoothZoomSensitivity = Mathf.Max(value, 1e-3f); } }
public float OrthoZoomSmoothValue { get { return _orthoZoomSmoothValue; } set { _orthoZoomSmoothValue = Mathf.Max(value, 1e-3f); } } public float OrthoZoomSmoothValue { get { return _orthoZoomSmoothValue; } set { _orthoZoomSmoothValue = Mathf.Max(value, 1e-3f); } }
@@ -49,16 +55,19 @@ namespace RTG
return camera.orthographic ? OrthoZoomSmoothValue : PerspZoomSmoothValue; return camera.orthographic ? OrthoZoomSmoothValue : PerspZoomSmoothValue;
} }
public float GetZoomSensitivity(Camera camera) public float GetZoomSensitivity(Camera camera, bool isFast)
{ {
if (_zoomMode == CameraZoomMode.Standard) return camera.orthographic ? OrthoStandardZoomSensitivity : PerspStandardZoomSensitivity; if (_zoomMode == CameraZoomMode.Standard)
else {
if (_zoomMode == CameraZoomMode.Smooth) return camera.orthographic ? OrthoSmoothZoomSensitivity : PerspSmoothZoomSensitivity; if(camera.orthographic)
return isFast ? OrthoFastZoomSensitivity : OrthoStandardZoomSensitivity;
else
return isFast ? PerspFastZoomSensitivity : PerspStandardZoomSensitivity;
}
//if (_zoomMode == CameraZoomMode.Smooth) return camera.orthographic ? OrthoSmoothZoomSensitivity : PerspSmoothZoomSensitivity;
return 0.0f; return 0.0f;
} }
protected override void RenderContent(UnityEngine.Object undoRecordObject) protected override void RenderContent(UnityEngine.Object undoRecordObject)
{ {

View File

@@ -349,8 +349,10 @@ namespace RTG
void GetInput() void GetInput()
{ {
float moveAmount = (_moveSettings.MoveSpeed + _currentAcceleration) * Time.deltaTime; float moveSpeed = RTInput.GetKey(KeyCode.LeftShift) ? _moveSettings.MoveFastSpeed : _moveSettings.MoveSpeed;
float moveAmount = (moveSpeed + _currentAcceleration) * Time.deltaTime;
Debug.Log("moveSpeed " + moveAmount);
Vector3 moveVector = Vector3.zero; Vector3 moveVector = Vector3.zero;
_moveDirFlags[(int)MoveDirection.Forward] = Hotkeys.MoveForward.IsActive(); _moveDirFlags[(int)MoveDirection.Forward] = Hotkeys.MoveForward.IsActive();
_moveDirFlags[(int)MoveDirection.Backwards] = !_moveDirFlags[(int)MoveDirection.Forward] && Hotkeys.MoveBack.IsActive(); _moveDirFlags[(int)MoveDirection.Backwards] = !_moveDirFlags[(int)MoveDirection.Forward] && Hotkeys.MoveBack.IsActive();
@@ -465,19 +467,20 @@ namespace RTG
return; return;
float mouseScroll = RTInput.MouseScroll(); float mouseScroll = RTInput.MouseScroll();
bool isFast = RTInput.GetKey(KeyCode.LeftShift);
if (Mathf.Approximately(mouseScroll, 0.0f)) if (Mathf.Approximately(mouseScroll, 0.0f))
return; return;
if (_zoomSettings.ZoomMode == CameraZoomMode.Standard) if (_zoomSettings.ZoomMode == CameraZoomMode.Standard)
{ {
Zoom(CalculateScrollZoomAmount(mouseScroll)); Zoom(CalculateScrollZoomAmount(mouseScroll, isFast));
//마우스 포인터위치로 //마우스 포인터위치로
} }
else //else
{ //{
StopCamTransform(); // StopCamTransform();
StartCoroutine(_genricCamTransformCrtn = DoSmoothZoom(mouseScroll)); // StartCoroutine(_genricCamTransformCrtn = DoSmoothZoom(mouseScroll));
} //}
} }
public void SliderZoomInOut(int value) public void SliderZoomInOut(int value)
@@ -558,9 +561,9 @@ namespace RTG
return _targetTransform.position + _targetTransform.forward * _focusPointOffset; return _targetTransform.position + _targetTransform.forward * _focusPointOffset;
} }
private float CalculateScrollZoomAmount(float deviceScroll) private float CalculateScrollZoomAmount(float deviceScroll, bool isFast)
{ {
float zoomAmount = deviceScroll * _zoomSettings.GetZoomSensitivity(TargetCamera); float zoomAmount = deviceScroll * _zoomSettings.GetZoomSensitivity(TargetCamera, isFast);
if (_zoomSettings.InvertZoomAxis) if (_zoomSettings.InvertZoomAxis)
zoomAmount *= -1.0f; zoomAmount *= -1.0f;
@@ -722,18 +725,18 @@ namespace RTG
} }
} }
private IEnumerator DoSmoothZoom(float deviceScroll) //private IEnumerator DoSmoothZoom(float deviceScroll)
{ //{
float zoomAmount = CalculateScrollZoomAmount(deviceScroll); // float zoomAmount = CalculateScrollZoomAmount(deviceScroll);
while(!Mathf.Approximately(zoomAmount, 0.0f)) // while(!Mathf.Approximately(zoomAmount, 0.0f))
{ // {
Zoom(zoomAmount); // Zoom(zoomAmount);
zoomAmount = Mathf.Lerp(zoomAmount, 0.0f, _zoomSettings.GetZoomSmoothValue(TargetCamera) * Time.deltaTime); // zoomAmount = Mathf.Lerp(zoomAmount, 0.0f, _zoomSettings.GetZoomSmoothValue(TargetCamera) * Time.deltaTime);
yield return null; // yield return null;
} // }
} //}
private IEnumerator DoConstantRotationSwitch(Quaternion targetRotation) private IEnumerator DoConstantRotationSwitch(Quaternion targetRotation)
{ {