- ToonPostProcess.shader: 횃불 고딕 스타일 후처리 쉐이더 (Built-in RP) - ToonCameraEffect.cs: 카메라 자동 부착 후처리 스크립트 - 중복 UI 스크립트 제거 (MenuIntroController, ToggleCustom) - 씬, 프리팹, 애니메이션 등 전체 업데이트 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
85 lines
4.9 KiB
C#
85 lines
4.9 KiB
C#
using UnityEngine; // 임포트할거에요 -> Unity 엔진 기본 기능을
|
|
using UnityEngine.SceneManagement; // 임포트할거에요 -> 씬 관리 기능을
|
|
|
|
// ══════════════════════════════════════════════════════════════════════
|
|
// PlayerSpawnPoint — 씬 전환 시 플레이어 위치 자동 배치
|
|
//
|
|
// DontDestroyOnLoad 플레이어가 새 씬에 도착하면,
|
|
// 이 스크립트가 있는 위치로 자동 이동시킵니다.
|
|
//
|
|
// 사용법: 보스 씬(또는 아무 씬)에 빈 오브젝트를 만들고
|
|
// 이 스크립트를 부착한 뒤, 원하는 스폰 위치에 배치하세요.
|
|
// 씬 뷰에서 기즈모로 위치를 확인할 수 있습니다.
|
|
// ══════════════════════════════════════════════════════════════════════
|
|
public class PlayerSpawnPoint : MonoBehaviour // 클래스를 정의할거에요 -> 플레이어 스폰 포인트를
|
|
{
|
|
[Header("스폰 설정")]
|
|
[Tooltip("플레이어를 찾을 태그")]
|
|
[SerializeField] private string playerTag = "Player"; // 변수를 선언할거에요 -> 플레이어 태그를
|
|
|
|
[Tooltip("스폰 시 플레이어가 바라볼 방향 (Y축 회전)")]
|
|
[SerializeField] private float spawnRotationY = 0f; // 변수를 선언할거에요 -> 스폰 시 회전 각도를
|
|
|
|
private void OnEnable() // 활성화 시 실행할거에요 -> 씬 로드 이벤트 구독을
|
|
{
|
|
SceneManager.sceneLoaded += OnSceneLoaded; // 구독할거에요 -> 씬 로드 완료 이벤트를
|
|
}
|
|
|
|
private void OnDisable() // 비활성화 시 실행할거에요 -> 이벤트 해제를
|
|
{
|
|
SceneManager.sceneLoaded -= OnSceneLoaded; // 해제할거에요 -> 씬 로드 완료 이벤트를
|
|
}
|
|
|
|
private void Start() // 시작 시 실행할거에요 -> 즉시 플레이어 배치를
|
|
{
|
|
MovePlayerToSpawn(); // 실행할거에요 -> 플레이어 이동을
|
|
}
|
|
|
|
private void OnSceneLoaded(Scene scene, LoadSceneMode mode) // 콜백을 정의할거에요 -> 씬 로드 완료 시 처리를
|
|
{
|
|
MovePlayerToSpawn(); // 실행할거에요 -> 플레이어 이동을
|
|
}
|
|
|
|
/// <summary>
|
|
/// 플레이어를 이 오브젝트 위치로 이동시킵니다.
|
|
/// CharacterController가 있으면 비활성화 후 이동 (텔레포트 방지)
|
|
/// </summary>
|
|
private void MovePlayerToSpawn() // 함수를 정의할거에요 -> 플레이어를 스폰 위치로 이동을
|
|
{
|
|
GameObject player = GameObject.FindGameObjectWithTag(playerTag); // 찾을거에요 -> 플레이어를
|
|
|
|
if (player == null) // 조건이 맞으면 실행할거에요 -> 못 찾으면
|
|
{
|
|
Debug.LogWarning("[PlayerSpawnPoint] 플레이어를 찾지 못했습니다!"); // 경고 로그
|
|
return; // 중단
|
|
}
|
|
|
|
// CharacterController가 있으면 일시 비활성화 (위치 강제 이동 시 필요)
|
|
CharacterController cc = player.GetComponent<CharacterController>(); // 가져올거에요 -> CharacterController를
|
|
if (cc != null) cc.enabled = false; // 비활성화할거에요 -> 텔레포트를 위해
|
|
|
|
// 위치 + 회전 설정
|
|
player.transform.position = transform.position; // 이동할거에요 -> 스폰 포인트 위치로
|
|
player.transform.rotation = Quaternion.Euler(0f, spawnRotationY, 0f); // 회전할거에요 -> 지정된 방향으로
|
|
|
|
// CharacterController 다시 활성화
|
|
if (cc != null) cc.enabled = true; // 활성화할거에요 -> 다시 켜기
|
|
|
|
Debug.Log($"[PlayerSpawnPoint] 플레이어를 스폰 위치로 이동 완료: {transform.position}"); // 로그를 찍을거에요
|
|
}
|
|
|
|
// ─────────────────────────────────────────────────────────────
|
|
// 씬 뷰 기즈모 — 스폰 위치 + 바라볼 방향 시각화
|
|
// ─────────────────────────────────────────────────────────────
|
|
private void OnDrawGizmos() // 기즈모를 그릴거에요 -> 씬 뷰에서 스폰 위치를
|
|
{
|
|
Gizmos.color = Color.cyan; // 색상을 설정할거에요 -> 시안색으로
|
|
Gizmos.DrawWireSphere(transform.position, 0.5f); // 그릴거에요 -> 스폰 위치를 원으로
|
|
|
|
// 바라볼 방향 화살표
|
|
Gizmos.color = Color.yellow; // 색상을 설정할거에요 -> 노란색으로
|
|
Vector3 forward = Quaternion.Euler(0f, spawnRotationY, 0f) * Vector3.forward; // 계산할거에요 -> 바라볼 방향을
|
|
Gizmos.DrawRay(transform.position, forward * 2f); // 그릴거에요 -> 방향 화살표를
|
|
}
|
|
}
|