
<aside> 💡
<aside> 💡

public class HeadMeshSwitcher : MonoBehaviour
{
[SerializeField] private SkinnedMeshRenderer targetRenderer;
[Header("Face Meshes & Materials")]
[SerializeField] private Mesh defaultHeadMesh;
[SerializeField] private Material[] defaultHeadMaterials;
[SerializeField] private Mesh eventHeadMesh;
[SerializeField] private Material[] eventHeadMaterials;
/// <summary>
/// 머리 교체 (true → ScaryFace, false → Basic Face)
/// </summary>
public void SetHead(bool eventFace)
{
if (targetRenderer == null)
{
return;
}
if (eventFace)
{
if (eventHeadMesh != null)
targetRenderer.sharedMesh = eventHeadMesh;
if (eventHeadMaterials != null && eventHeadMaterials.Length > 0)
targetRenderer.materials = eventHeadMaterials;
}
else
{
if (defaultHeadMesh != null)
targetRenderer.sharedMesh = defaultHeadMesh;
if (defaultHeadMaterials != null && defaultHeadMaterials.Length > 0)
targetRenderer.materials = defaultHeadMaterials;
}
}
public void SetScaryHead()
{
SetHead(true);
}
public void SetDefaultHead()
{
SetHead(false);
}
}
문제가 되었던 부분

원래 기획서의 살인마 시야는 forward를 기준으로 앞쪽만 바라보고 Player를 인지하는 설정인데 문제는 그 부분을 수정하기 위해 기존 거리로 판단했던 부분을 수정하였다.
void ChasingUpdate()
{
if (IsPlayerInFieldOfView())
{
animator.speed = 1f;
animator.SetBool("Running", true);
if (!agent.pathPending)
{
NavMeshPath path = new NavMeshPath();
if (agent.CalculatePath(Player.position, path))
{
agent.isStopped = false;
agent.SetDestination(Player.position);
}
else
{
agent.isStopped = true;
SetState(EnemyState.Patrol);
animator.SetBool("Running", false);
}
}
}
기존 if 조건문에서는 playerDistance < findDistatnce && IsPlayerInFieldOfView() 보다 작을 때 Chasing 하는 조건이였지만 IsPlayerInFieldOfView를 수정하여, Angle 방향으로만 볼 수 있도록 바꿨다.

하지만 계속해서 뒤를 인식하는 문제가 발생하였다. 이유를 살펴보면 일단 애니메이터에서 확인한 결과 Run.anim으로 넘어가지 않았다라는 것을 인지하여 분명 Chasing 상태는 아닌 것으로 판단했지만 Walk.anim의 속도가 RunSpeed 속도와 유사하게 일치한다는 점을 발견하였다. 따라서 문제는 SetState에서 전환과정에 문제가 있나 살펴보았다.