728x90
플레이어가 공격할 때 플레이어 시점으로 변환 되어서 공격을 하도록 수정하였습니다.
CamChange.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CamChange : MonoBehaviour
{
public Camera mainCam;
public Camera[] cams;
private void Start()
{
mainCam.gameObject.SetActive(true);
for (int i = 0; i < cams.Length; i++)
{
cams[i].enabled = false;
}
}
public void CameraSetting(int num)
{
switch (num)
{
case 1:
cams[0].enabled = true;
cams[1].enabled = false;
cams[2].enabled = false;
cams[3].enabled = false;
break;
case 2:
cams[0].enabled = false;
cams[1].enabled = true;
cams[2].enabled = false;
cams[3].enabled = false;
break;
case 3:
cams[0].enabled = false;
cams[1].enabled = false;
cams[2].enabled = true;
cams[3].enabled = false;
break;
case 4:
cams[0].enabled = false;
cams[1].enabled = false;
cams[2].enabled = false;
cams[3].enabled = true;
break;
}
}
public void MainCamSet()
{
mainCam.enabled = true;
cams[0].enabled = false;
cams[1].enabled = false;
cams[2].enabled = false;
cams[3].enabled = false;
}
}
플레이어가 넷이라 그냥 카메라를 4개 만든 뒤, 끄고 키도록 만들었습니다.
시작할 때 메인 카메라를 끄고 모든 캠들을 끕니다.
CameraSetting 메서드에서 1이 들어가면 인덱스의 0번 째, 즉 맨 처음 카메라가 켜집니다.
TurnManager의 NextTime 메서드입니다.
public IEnumerator NextTime()
{
currentTurnIndex++;
if (currentTurnIndex >= turnOrder.Count)
{
currentTurnIndex = 0;
}
object currentCharacter = turnOrder[currentTurnIndex];
turnDisplay.UpdateCurrentTurn(currentCharacter);
turnDisplay.UpdateTurnList(turnOrder, currentTurnIndex);
yield return new WaitForSeconds(0.5f);
Debug.Log($"{(currentCharacter is Player ? (currentCharacter as Player).CharacterName : (currentCharacter as Enemy).CharacterName)}의 턴입니다.");
if (currentCharacter is Enemy enemy)
{
enemy.AttackRandomPlayer();
yield return new WaitForSeconds(1f);
StartCoroutine(NextTime());
}
if (currentCharacter is Player player)
{
camChange.mainCam.gameObject.SetActive(false);
if (player.CharacterName.Contains("1"))
{
camChange.CameraSetting(1);
}
if (player.CharacterName.Contains("2"))
{
camChange.CameraSetting(2);
}
if (player.CharacterName.Contains("3"))
{
camChange.CameraSetting(3);
}
if (player.CharacterName.Contains("4"))
{
camChange.CameraSetting(4);
}
}
}
만약 현재 캐릭터가 Player면 메인 캠을 끕니다.
그 다음 이름에 1이 들어 있다면 첫 번째 캠을 킵니다.
2가 들어 있다면 두 번째, 3이면 세 번째 4라면 네 번째 캠을 킵니다.
Enemy의 AttackRandomPlayer 메서드
public void AttackRandomPlayer()
{
if (playerTransforms.Length > 0)
{
int randomIndex = Random.Range(0, playerTransforms.Length);
Player target = playerTransforms[randomIndex].GetComponent<Player>();
camChange.CameraSetting(randomIndex + 1);
if (target != null && target.Health > 0)
{
MoveTo(target.transform.position, () =>
{
target.Health -= AttackPower;
Debug.Log($"{CharacterName}가 {target.CharacterName}를 공격했습니다! (남은 체력: {target.Health})");
MoveTo(originalPosition, null);
}, AttackMoveSpeed);
}
}
}
적이 공격할 때 피격되는 플레이어가 화면에 띄워 지도록 CameraSetting을 사용했습니다.
728x90
'Unity' 카테고리의 다른 글
3D 테스트 프로젝트 14 (0) | 2025.03.07 |
---|---|
3D 테스트 프로젝트 13 (0) | 2025.03.06 |
3D 테스트 프로젝트 11 (0) | 2025.03.04 |
3D 테스트 프로젝트 10 (0) | 2025.03.03 |
3D 테스트 프로젝트 9 (0) | 2025.03.02 |