카메라 가속 기능 추가 #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;
[SerializeField]
private float _moveSpeed = 6.0f;
[SerializeField]
private float _accelerationRate = 15.0f;
private float _moveSpeed = 30.0f;
private float _moveFastSpeed = 60.0f;
private float _accelerationRate = 0f;
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); } }

View File

@@ -22,6 +22,10 @@ namespace RTG
[SerializeField]
private float _perspStandardZoomSensitivity = 10.0f;
[SerializeField]
private float _orthoFastZoomSensitivity = 30.0f;
[SerializeField]
private float _perspFastZoomSensitivity = 30.0f;
[SerializeField]
private float _orthoSmoothZoomSensitivity = 5.0f;
[SerializeField]
private float _perspSmoothZoomSensitivity = 5.0f;
@@ -37,6 +41,8 @@ namespace RTG
public CameraZoomMode ZoomMode { get { return _zoomMode; } set { _zoomMode = value; } }
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 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 PerspSmoothZoomSensitivity { get { return _perspSmoothZoomSensitivity; } set { _perspSmoothZoomSensitivity = 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;
}
public float GetZoomSensitivity(Camera camera)
public float GetZoomSensitivity(Camera camera, bool isFast)
{
if (_zoomMode == CameraZoomMode.Standard) return camera.orthographic ? OrthoStandardZoomSensitivity : PerspStandardZoomSensitivity;
else
if (_zoomMode == CameraZoomMode.Smooth) return camera.orthographic ? OrthoSmoothZoomSensitivity : PerspSmoothZoomSensitivity;
if (_zoomMode == CameraZoomMode.Standard)
{
if(camera.orthographic)
return isFast ? OrthoFastZoomSensitivity : OrthoStandardZoomSensitivity;
else
return isFast ? PerspFastZoomSensitivity : PerspStandardZoomSensitivity;
}
//if (_zoomMode == CameraZoomMode.Smooth) return camera.orthographic ? OrthoSmoothZoomSensitivity : PerspSmoothZoomSensitivity;
return 0.0f;
}
protected override void RenderContent(UnityEngine.Object undoRecordObject)
{

View File

@@ -349,8 +349,10 @@ namespace RTG
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;
_moveDirFlags[(int)MoveDirection.Forward] = Hotkeys.MoveForward.IsActive();
_moveDirFlags[(int)MoveDirection.Backwards] = !_moveDirFlags[(int)MoveDirection.Forward] && Hotkeys.MoveBack.IsActive();
@@ -465,19 +467,20 @@ namespace RTG
return;
float mouseScroll = RTInput.MouseScroll();
bool isFast = RTInput.GetKey(KeyCode.LeftShift);
if (Mathf.Approximately(mouseScroll, 0.0f))
return;
if (_zoomSettings.ZoomMode == CameraZoomMode.Standard)
{
Zoom(CalculateScrollZoomAmount(mouseScroll));
Zoom(CalculateScrollZoomAmount(mouseScroll, isFast));
//마우스 포인터위치로
}
else
{
StopCamTransform();
StartCoroutine(_genricCamTransformCrtn = DoSmoothZoom(mouseScroll));
}
//else
//{
// StopCamTransform();
// StartCoroutine(_genricCamTransformCrtn = DoSmoothZoom(mouseScroll));
//}
}
public void SliderZoomInOut(int value)
@@ -558,9 +561,9 @@ namespace RTG
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)
zoomAmount *= -1.0f;
@@ -722,18 +725,18 @@ namespace RTG
}
}
private IEnumerator DoSmoothZoom(float deviceScroll)
{
float zoomAmount = CalculateScrollZoomAmount(deviceScroll);
//private IEnumerator DoSmoothZoom(float deviceScroll)
//{
// float zoomAmount = CalculateScrollZoomAmount(deviceScroll);
while(!Mathf.Approximately(zoomAmount, 0.0f))
{
Zoom(zoomAmount);
zoomAmount = Mathf.Lerp(zoomAmount, 0.0f, _zoomSettings.GetZoomSmoothValue(TargetCamera) * Time.deltaTime);
// while(!Mathf.Approximately(zoomAmount, 0.0f))
// {
// Zoom(zoomAmount);
// zoomAmount = Mathf.Lerp(zoomAmount, 0.0f, _zoomSettings.GetZoomSmoothValue(TargetCamera) * Time.deltaTime);
yield return null;
}
}
// yield return null;
// }
//}
private IEnumerator DoConstantRotationSwitch(Quaternion targetRotation)
{