2025-01-10 01:18:33 +00:00
|
|
|
using System.Collections;
|
2024-12-15 01:39:39 +00:00
|
|
|
using UnityEngine;
|
2025-01-10 01:18:33 +00:00
|
|
|
using UnityEngine.UI;
|
2024-12-15 01:39:39 +00:00
|
|
|
|
|
|
|
|
public class BotMenu : MonoBehaviourSingletonTemplate<BotMenu>
|
|
|
|
|
{
|
2025-01-10 01:18:33 +00:00
|
|
|
public RectTransform rtf_onoff, rtf_layout;
|
|
|
|
|
public HorizontalLayoutGroup m_layout;
|
2024-12-15 01:39:39 +00:00
|
|
|
|
2025-01-10 01:18:33 +00:00
|
|
|
private bool bOn = true; // 현재 상태 (On/Off)
|
|
|
|
|
private bool isAnimating = false; // 애니메이션 진행 여부 확인
|
2024-12-15 01:39:39 +00:00
|
|
|
|
|
|
|
|
private void OnEnable()
|
|
|
|
|
{
|
|
|
|
|
Set_OnOff();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Set_OnOff()
|
|
|
|
|
{
|
2025-01-10 01:18:33 +00:00
|
|
|
// 애니메이션이 이미 진행 중이라면 실행하지 않음
|
|
|
|
|
if (isAnimating) return;
|
|
|
|
|
|
|
|
|
|
StartCoroutine(Co_OnOff());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
IEnumerator Co_OnOff()
|
|
|
|
|
{
|
|
|
|
|
isAnimating = true; // 애니메이션 시작
|
|
|
|
|
|
|
|
|
|
var targetValue = bOn ? -257 : -800; // 목표 값
|
|
|
|
|
var startValue = m_layout.padding.left; // 시작 값
|
|
|
|
|
var duration = 0.15f; // 애니메이션 시간
|
|
|
|
|
var elapsedTime = 0f;
|
|
|
|
|
|
|
|
|
|
// 초기 회전 값과 목표 회전 값 설정
|
|
|
|
|
var startRotation = rtf_onoff.localEulerAngles.z;
|
|
|
|
|
var targetRotation = bOn ? -90f : 90f;
|
|
|
|
|
|
|
|
|
|
while (elapsedTime < duration)
|
|
|
|
|
{
|
|
|
|
|
elapsedTime += Time.deltaTime;
|
|
|
|
|
var t = Mathf.Clamp01(elapsedTime / duration);
|
|
|
|
|
|
|
|
|
|
// 선형 보간으로 padding.left 값을 업데이트
|
|
|
|
|
var newValue = Mathf.Lerp(startValue, targetValue, t);
|
|
|
|
|
m_layout.padding.left = Mathf.RoundToInt(newValue);
|
|
|
|
|
LayoutRebuilder.ForceRebuildLayoutImmediate(rtf_layout);
|
|
|
|
|
|
|
|
|
|
// 선형 보간으로 회전값 업데이트
|
|
|
|
|
var newRotation = Mathf.LerpAngle(startRotation, targetRotation, t);
|
|
|
|
|
rtf_onoff.localEulerAngles = new Vector3(rtf_onoff.localEulerAngles.x, rtf_onoff.localEulerAngles.y, newRotation);
|
|
|
|
|
|
|
|
|
|
// 변경된 값을 레이아웃에 반영
|
|
|
|
|
m_layout.CalculateLayoutInputHorizontal();
|
|
|
|
|
yield return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 최종 값 설정
|
|
|
|
|
m_layout.padding.left = targetValue;
|
|
|
|
|
rtf_onoff.localEulerAngles = new Vector3(rtf_onoff.localEulerAngles.x, rtf_onoff.localEulerAngles.y, targetRotation);
|
|
|
|
|
LayoutRebuilder.ForceRebuildLayoutImmediate(rtf_layout);
|
|
|
|
|
|
|
|
|
|
isAnimating = false; // 애니메이션 종료
|
2024-12-15 01:39:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void OnClick_OnOff()
|
|
|
|
|
{
|
2025-01-10 01:18:33 +00:00
|
|
|
// 상태를 토글하고 애니메이션 시작
|
2024-12-15 01:39:39 +00:00
|
|
|
bOn = !bOn;
|
|
|
|
|
Set_OnOff();
|
|
|
|
|
}
|
|
|
|
|
}
|