- ToonPostProcess.shader: 횃불 고딕 스타일 후처리 쉐이더 (Built-in RP) - ToonCameraEffect.cs: 카메라 자동 부착 후처리 스크립트 - 중복 UI 스크립트 제거 (MenuIntroController, ToggleCustom) - 씬, 프리팹, 애니메이션 등 전체 업데이트 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
117 lines
3.4 KiB
C#
117 lines
3.4 KiB
C#
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
using TMPro;
|
|
|
|
public class KeyRebinder : MonoBehaviour
|
|
{
|
|
[System.Serializable]
|
|
public class KeyBinding
|
|
{
|
|
public string 액션이름;
|
|
public KeyCode 기본키;
|
|
public KeyCode 현재키;
|
|
public Button 버튼;
|
|
public TextMeshProUGUI 버튼텍스트;
|
|
}
|
|
|
|
public KeyBinding[] 키목록;
|
|
|
|
[Header("이미지 설정")]
|
|
public Sprite 대기이미지;
|
|
public Sprite 입력중이미지;
|
|
|
|
private KeyBinding 현재변경중 = null;
|
|
|
|
// 알기 쉬운 이름으로 변환
|
|
string 키이름가져오기(KeyCode 키)
|
|
{
|
|
switch (키)
|
|
{
|
|
case KeyCode.Mouse0: return "마우스 좌클릭";
|
|
case KeyCode.Mouse1: return "마우스 우클릭";
|
|
case KeyCode.Mouse2: return "마우스 휠클릭";
|
|
case KeyCode.Space: return "스페이스바";
|
|
case KeyCode.Return: return "엔터";
|
|
case KeyCode.Escape: return "ESC";
|
|
case KeyCode.LeftShift: return "좌 Shift";
|
|
case KeyCode.RightShift: return "우 Shift";
|
|
case KeyCode.LeftControl: return "좌 Ctrl";
|
|
case KeyCode.RightControl: return "우 Ctrl";
|
|
case KeyCode.LeftAlt: return "좌 Alt";
|
|
case KeyCode.RightAlt: return "우 Alt";
|
|
case KeyCode.Tab: return "Tab";
|
|
case KeyCode.CapsLock: return "CapsLock";
|
|
case KeyCode.Backspace: return "Backspace";
|
|
case KeyCode.Delete: return "Delete";
|
|
case KeyCode.UpArrow: return "↑";
|
|
case KeyCode.DownArrow: return "↓";
|
|
case KeyCode.LeftArrow: return "←";
|
|
case KeyCode.RightArrow: return "→";
|
|
default: return 키.ToString().ToUpper();
|
|
}
|
|
}
|
|
|
|
void Start()
|
|
{
|
|
foreach (KeyBinding 키 in 키목록)
|
|
{
|
|
string 저장된키 = PlayerPrefs.GetString(키.액션이름, 키.기본키.ToString());
|
|
키.현재키 = (KeyCode)System.Enum.Parse(typeof(KeyCode), 저장된키);
|
|
키텍스트업데이트(키);
|
|
}
|
|
}
|
|
|
|
public void 키변경시작(int 인덱스)
|
|
{
|
|
if (현재변경중 != null)
|
|
현재변경중.버튼.GetComponent<Image>().sprite = 대기이미지;
|
|
|
|
현재변경중 = 키목록[인덱스];
|
|
현재변경중.버튼.GetComponent<Image>().sprite = 입력중이미지;
|
|
현재변경중.버튼텍스트.text = "입력하세요...";
|
|
}
|
|
|
|
void Update()
|
|
{
|
|
if (현재변경중 == null) return;
|
|
|
|
if (Input.GetKeyDown(KeyCode.Escape))
|
|
{
|
|
현재변경중.버튼.GetComponent<Image>().sprite = 대기이미지;
|
|
키텍스트업데이트(현재변경중);
|
|
현재변경중 = null;
|
|
return;
|
|
}
|
|
|
|
foreach (KeyCode 키코드 in System.Enum.GetValues(typeof(KeyCode)))
|
|
{
|
|
if (Input.GetKeyDown(키코드))
|
|
{
|
|
현재변경중.현재키 = 키코드;
|
|
PlayerPrefs.SetString(현재변경중.액션이름, 키코드.ToString());
|
|
PlayerPrefs.Save();
|
|
|
|
현재변경중.버튼.GetComponent<Image>().sprite = 대기이미지;
|
|
키텍스트업데이트(현재변경중);
|
|
현재변경중 = null;
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
void 키텍스트업데이트(KeyBinding 키)
|
|
{
|
|
키.버튼텍스트.text = 키이름가져오기(키.현재키);
|
|
}
|
|
|
|
public void 기본값복원()
|
|
{
|
|
foreach (KeyBinding 키 in 키목록)
|
|
{
|
|
키.현재키 = 키.기본키;
|
|
PlayerPrefs.SetString(키.액션이름, 키.기본키.ToString());
|
|
키텍스트업데이트(키);
|
|
}
|
|
PlayerPrefs.Save();
|
|
}
|
|
} |