- ToonPostProcess.shader: 횃불 고딕 스타일 후처리 쉐이더 (Built-in RP) - ToonCameraEffect.cs: 카메라 자동 부착 후처리 스크립트 - 중복 UI 스크립트 제거 (MenuIntroController, ToggleCustom) - 씬, 프리팹, 애니메이션 등 전체 업데이트 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
340 lines
11 KiB
C#
340 lines
11 KiB
C#
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
using TMPro;
|
|
using UnityEngine.Audio;
|
|
using UnityEngine.Rendering.PostProcessing;
|
|
|
|
|
|
public class ClickSettingsManager : MonoBehaviour
|
|
{
|
|
[Header("--- 화면 ---")]
|
|
public DropdownCustom 해상도드롭다운;
|
|
private string 선택된해상도 = "1920 X 1080";
|
|
private int 선택된화면모드 = 0;
|
|
|
|
[Header("--- 그래픽 ---")]
|
|
public Slider 시야거리슬라이더;
|
|
private int 선택된텍스처 = 0;
|
|
private int 선택된그림자 = 0;
|
|
private int 선택된안개 = 0;
|
|
|
|
[Header("--- 효과 ---")]
|
|
public ToggleCustom 안티앨리어싱토글;
|
|
public ToggleCustom 블룸토글;
|
|
public ToggleCustom 화면흔들림토글;
|
|
|
|
[Header("--- 시스템 ---")]
|
|
public TMP_InputField 프레임입력칸;
|
|
|
|
[Header("--- 오디오 ---")]
|
|
public Slider 마스터볼륨슬라이더;
|
|
public Slider BGM볼륨슬라이더;
|
|
public Slider 효과음볼륨슬라이더;
|
|
public Slider 환경음볼륨슬라이더;
|
|
public DropdownCustom 출력장치드롭다운;
|
|
|
|
[Header("--- AudioMixer ---")]
|
|
public AudioMixer 오디오믹서;
|
|
|
|
[Header("--- 게임 ---")]
|
|
public Slider 밝기슬라이더;
|
|
private string 선택된언어 = "한국어";
|
|
|
|
[Header("--- 버튼 셀렉터 ---")]
|
|
public ButtonSelector 텍스처셀렉터;
|
|
public ButtonSelector 그림자셀렉터;
|
|
public ButtonSelector 안개셀렉터;
|
|
public ButtonSelector 화면모드셀렉터;
|
|
|
|
[Header("--- 취소버튼 ---")]
|
|
public Button 취소버튼;
|
|
public Sprite 취소버튼활성이미지;
|
|
public Sprite 취소버튼비활성이미지;
|
|
public Color 취소버튼활성텍스트색상 = new Color(1f, 0.85f, 0.2f); // 황금빛
|
|
public Color 취소버튼비활성텍스트색상 = new Color(0.4f, 0.4f, 0.4f); // 회색
|
|
|
|
[Header("--- 조작 ---")]
|
|
public KeyRebinder 키리바인더;
|
|
|
|
[Header("--- Post Processing ---")]
|
|
public PostProcessVolume 포스트프로세싱볼륨;
|
|
|
|
// 마지막으로 적용된 값 저장용
|
|
private int 적용된텍스처 = 0;
|
|
private int 적용된그림자 = 0;
|
|
private int 적용된안개 = 0;
|
|
private int 적용된화면모드 = 0;
|
|
private string 적용된해상도 = "1920 X 1080";
|
|
private bool 변경됨 = false;
|
|
|
|
void Start()
|
|
{
|
|
취소버튼비활성화();
|
|
}
|
|
|
|
// ── 취소버튼 활성/비활성 ────────────────
|
|
void 취소버튼비활성화()
|
|
{
|
|
변경됨 = false;
|
|
취소버튼.interactable = false;
|
|
취소버튼.GetComponent<Image>().sprite = 취소버튼비활성이미지;
|
|
|
|
// 텍스트 색상 변경
|
|
TextMeshProUGUI 텍스트 = 취소버튼.GetComponentInChildren<TextMeshProUGUI>();
|
|
if (텍스트 != null)
|
|
텍스트.color = 취소버튼비활성텍스트색상;
|
|
}
|
|
|
|
void 취소버튼활성화()
|
|
{
|
|
if (변경됨) return;
|
|
변경됨 = true;
|
|
취소버튼.interactable = true;
|
|
취소버튼.GetComponent<Image>().sprite = 취소버튼활성이미지;
|
|
|
|
// 텍스트 색상 변경
|
|
TextMeshProUGUI 텍스트 = 취소버튼.GetComponentInChildren<TextMeshProUGUI>();
|
|
if (텍스트 != null)
|
|
텍스트.color = 취소버튼활성텍스트색상;
|
|
|
|
}
|
|
|
|
// ── 화면 모드 선택 ──────────────────────
|
|
public void 전체화면선택() { 선택된화면모드 = 0; 취소버튼활성화(); }
|
|
public void 창모드선택() { 선택된화면모드 = 1; 취소버튼활성화(); }
|
|
public void 무테두리선택() { 선택된화면모드 = 2; 취소버튼활성화(); }
|
|
|
|
// ── 해상도 선택 ─────────────────────────
|
|
public void 해상도선택(string 해상도)
|
|
{
|
|
선택된해상도 = 해상도;
|
|
취소버튼활성화();
|
|
}
|
|
|
|
// ── 그래픽 선택 ─────────────────────────
|
|
public void 텍스처선택(int 인덱스) { 선택된텍스처 = 인덱스; 취소버튼활성화(); }
|
|
public void 그림자선택(int 인덱스) { 선택된그림자 = 인덱스; 취소버튼활성화(); }
|
|
public void 안개선택(int 인덱스) { 선택된안개 = 인덱스; 취소버튼활성화(); }
|
|
|
|
// ── 적용 버튼 ───────────────────────────
|
|
public void 적용()
|
|
{
|
|
적용된텍스처 = 선택된텍스처;
|
|
적용된그림자 = 선택된그림자;
|
|
적용된안개 = 선택된안개;
|
|
적용된화면모드 = 선택된화면모드;
|
|
적용된해상도 = 선택된해상도;
|
|
|
|
화면적용();
|
|
그래픽적용();
|
|
오디오적용();
|
|
시스템적용();
|
|
|
|
취소버튼비활성화();
|
|
PlayerPrefs.Save();
|
|
Debug.Log("설정 적용 완료!");
|
|
}
|
|
|
|
// ── 취소 버튼 ───────────────────────────
|
|
public void 취소()
|
|
{
|
|
선택된텍스처 = 적용된텍스처;
|
|
선택된그림자 = 적용된그림자;
|
|
선택된안개 = 적용된안개;
|
|
선택된화면모드 = 적용된화면모드;
|
|
선택된해상도 = 적용된해상도;
|
|
|
|
if (텍스처셀렉터 != null) 텍스처셀렉터.기본값설정(적용된텍스처);
|
|
if (그림자셀렉터 != null) 그림자셀렉터.기본값설정(적용된그림자);
|
|
if (안개셀렉터 != null) 안개셀렉터.기본값설정(적용된안개);
|
|
if (화면모드셀렉터 != null) 화면모드셀렉터.기본값설정(적용된화면모드);
|
|
|
|
화면적용();
|
|
그래픽적용();
|
|
|
|
취소버튼비활성화();
|
|
Debug.Log("취소됨!");
|
|
}
|
|
|
|
// ── 기본값 복원 ─────────────────────────
|
|
public void 기본값복원()
|
|
{
|
|
선택된화면모드 = 0;
|
|
선택된텍스처 = 2;
|
|
선택된그림자 = 2;
|
|
선택된안개 = 2;
|
|
|
|
if (텍스처셀렉터 != null) 텍스처셀렉터.기본값설정(2);
|
|
if (그림자셀렉터 != null) 그림자셀렉터.기본값설정(2);
|
|
if (안개셀렉터 != null) 안개셀렉터.기본값설정(2);
|
|
if (화면모드셀렉터 != null) 화면모드셀렉터.기본값설정(0);
|
|
|
|
if (시야거리슬라이더 != null) 시야거리슬라이더.value = 100;
|
|
if (마스터볼륨슬라이더 != null) 마스터볼륨슬라이더.value = 100;
|
|
if (BGM볼륨슬라이더 != null) BGM볼륨슬라이더.value = 100;
|
|
if (효과음볼륨슬라이더 != null) 효과음볼륨슬라이더.value = 100;
|
|
if (환경음볼륨슬라이더 != null) 환경음볼륨슬라이더.value = 100;
|
|
|
|
if (프레임입력칸 != null)
|
|
프레임입력칸.text = "60";
|
|
|
|
if (안티앨리어싱토글 != null) 안티앨리어싱토글.기본값설정(false);
|
|
if (블룸토글 != null) 블룸토글.기본값설정(false);
|
|
if (화면흔들림토글 != null) 화면흔들림토글.기본값설정(false);
|
|
|
|
// 키 리바인딩 기본값 복원 추가!
|
|
if (키리바인더 != null) 키리바인더.기본값복원();
|
|
|
|
// 게임 기본값
|
|
if (밝기슬라이더 != null)
|
|
밝기슬라이더.value = 50;
|
|
선택된언어 = "한국어";
|
|
|
|
화면적용();
|
|
그래픽적용();
|
|
오디오적용();
|
|
시스템적용();
|
|
게임적용();
|
|
|
|
취소버튼비활성화();
|
|
PlayerPrefs.DeleteAll();
|
|
Debug.Log("기본값 복원 완료!");
|
|
}
|
|
|
|
// ── 화면 적용 ───────────────────────────
|
|
void 화면적용()
|
|
{
|
|
string[] 분리 = 선택된해상도.Split('X');
|
|
if (분리.Length == 2)
|
|
{
|
|
int 너비 = int.Parse(분리[0].Trim());
|
|
int 높이 = int.Parse(분리[1].Trim());
|
|
Screen.SetResolution(너비, 높이, Screen.fullScreen);
|
|
}
|
|
|
|
if (선택된화면모드 == 0)
|
|
{
|
|
Screen.fullScreenMode = FullScreenMode.ExclusiveFullScreen;
|
|
Screen.fullScreen = true;
|
|
}
|
|
else if (선택된화면모드 == 1)
|
|
{
|
|
Screen.fullScreenMode = FullScreenMode.Windowed;
|
|
Screen.fullScreen = false;
|
|
}
|
|
else if (선택된화면모드 == 2)
|
|
{
|
|
Screen.fullScreenMode = FullScreenMode.FullScreenWindow;
|
|
Screen.fullScreen = true;
|
|
}
|
|
}
|
|
|
|
// ── 그래픽 적용 ─────────────────────────
|
|
void 그래픽적용()
|
|
{
|
|
if (시야거리슬라이더 != null)
|
|
PlayerPrefs.SetFloat("FOV", 시야거리슬라이더.value);
|
|
|
|
QualitySettings.globalTextureMipmapLimit = 2 - 선택된텍스처;
|
|
Debug.Log("텍스처 적용: " + QualitySettings.globalTextureMipmapLimit);
|
|
|
|
if (선택된그림자 == 0)
|
|
{
|
|
QualitySettings.shadows = ShadowQuality.Disable;
|
|
Debug.Log("그림자: 꺼짐");
|
|
}
|
|
else if (선택된그림자 == 1)
|
|
{
|
|
QualitySettings.shadows = ShadowQuality.HardOnly;
|
|
Debug.Log("그림자: 보통");
|
|
}
|
|
else
|
|
{
|
|
QualitySettings.shadows = ShadowQuality.All;
|
|
Debug.Log("그림자: 높음");
|
|
}
|
|
|
|
if (안티앨리어싱토글 != null)
|
|
PlayerPrefs.SetInt("AntiAliasing", 안티앨리어싱토글.상태가져오기() ? 1 : 0);
|
|
if (블룸토글 != null)
|
|
PlayerPrefs.SetInt("Bloom", 블룸토글.상태가져오기() ? 1 : 0);
|
|
if (화면흔들림토글 != null)
|
|
PlayerPrefs.SetInt("ScreenShake", 화면흔들림토글.상태가져오기() ? 1 : 0);
|
|
}
|
|
|
|
// ── 오디오 적용 ─────────────────────────
|
|
void 오디오적용()
|
|
{
|
|
if (마스터볼륨슬라이더 != null)
|
|
{
|
|
float 볼륨 = 마스터볼륨슬라이더.value;
|
|
PlayerPrefs.SetFloat("MasterVolume", 볼륨);
|
|
오디오믹서.SetFloat("MasterVolume",
|
|
볼륨 > 0 ? Mathf.Log10(볼륨 / 100f) * 20 : -80f);
|
|
}
|
|
|
|
if (BGM볼륨슬라이더 != null)
|
|
{
|
|
float 볼륨 = BGM볼륨슬라이더.value;
|
|
PlayerPrefs.SetFloat("BGMVolume", 볼륨);
|
|
오디오믹서.SetFloat("BGMVolume",
|
|
볼륨 > 0 ? Mathf.Log10(볼륨 / 100f) * 20 : -80f);
|
|
}
|
|
|
|
if (효과음볼륨슬라이더 != null)
|
|
{
|
|
float 볼륨 = 효과음볼륨슬라이더.value;
|
|
PlayerPrefs.SetFloat("SFXVolume", 볼륨);
|
|
오디오믹서.SetFloat("SFXVolume",
|
|
볼륨 > 0 ? Mathf.Log10(볼륨 / 100f) * 20 : -80f);
|
|
}
|
|
|
|
if (환경음볼륨슬라이더 != null)
|
|
{
|
|
float 볼륨 = 환경음볼륨슬라이더.value;
|
|
PlayerPrefs.SetFloat("ENVVolume", 볼륨);
|
|
오디오믹서.SetFloat("ENVVolume",
|
|
볼륨 > 0 ? Mathf.Log10(볼륨 / 100f) * 20 : -80f);
|
|
}
|
|
}
|
|
|
|
// ── 시스템 적용 ─────────────────────────
|
|
void 시스템적용()
|
|
{
|
|
if (프레임입력칸 != null && 프레임입력칸.text != "")
|
|
{
|
|
int 프레임 = int.Parse(프레임입력칸.text);
|
|
Application.targetFrameRate = 프레임;
|
|
PlayerPrefs.SetInt("TargetFPS", 프레임);
|
|
}
|
|
}
|
|
|
|
// ── 게임 적용 ─────────────────────────
|
|
void 게임적용()
|
|
{
|
|
// 밝기 적용
|
|
if (밝기슬라이더 != null && 포스트프로세싱볼륨 != null)
|
|
{
|
|
float 밝기값 = 밝기슬라이더.value;
|
|
PlayerPrefs.SetFloat("Brightness", 밝기값);
|
|
|
|
ColorGrading 컬러그레이딩;
|
|
if (포스트프로세싱볼륨.profile.TryGetSettings(out 컬러그레이딩))
|
|
{
|
|
// 0~100 슬라이더 값을 -3~3 범위로 변환
|
|
컬러그레이딩.postExposure.value = (밝기값 / 100f - 0.5f) * 6f;
|
|
}
|
|
}
|
|
|
|
// 언어 저장
|
|
PlayerPrefs.SetString("Language", 선택된언어);
|
|
Debug.Log("언어 저장: " + 선택된언어);
|
|
}
|
|
|
|
// ── 언어 ─────────────────────────
|
|
public void 언어선택(string 언어)
|
|
{
|
|
선택된언어 = 언어;
|
|
취소버튼활성화();
|
|
}
|
|
} |