작성
·
268
·
수정됨
0
몬스터 anim이 WAIT 에서 RUN으로 animator에서는 변경이 되는데 몬스터 자체 내에서 계속 Idle 상태입니다.
--> WAIT 일 때도 모션이 Idle , RUN 일 때도 Idle 입니다
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public abstract class BaseController : MonoBehaviour
{
[SerializeField]
protected Vector3 _destPos;
[SerializeField]
protected Define.State _state = Define.State.Idle;
[SerializeField]
protected GameObject _lockTarget;
public virtual Define.State State
{
get { return _state; }
set
{
_state = value;
Animator anim = GetComponent<Animator>();
switch (_state)
{
case Define.State.Idle:
anim.CrossFade("WAIT", 0.1f);
break;
case Define.State.Moving:
anim.CrossFade("RUN", 0.1f);
break;
case Define.State.Skill:
anim.CrossFade("ATTACK", 0.1f, -1, 0);
break;
case Define.State.Die:
break;
}
}
}
private void Start()
{
Init();
}
void Update()
{
switch (State)
{
case Define.State.Idle:
UpdateIdle();
break;
case Define.State.Moving:
UpdateMoving();
break;
case Define.State.Die:
UpdateDie();
break;
case Define.State.Skill:
UpdateSkill();
break;
}
}
public abstract void Init();
protected virtual void UpdateDie() { }
protected virtual void UpdateIdle() { }
protected virtual void UpdateMoving() { }
protected virtual void UpdateSkill() { }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class MonsterController : BaseController
{
Stat _stat;
[SerializeField]
float _sacnRange = 10;
[SerializeField]
float _attackRange = 2;
public override void Init()
{
_stat = gameObject.GetComponent<Stat>();
if (gameObject.GetComponentInChildren<UI_HPBar>() == null)
Managers.UI.MakeWorldSpaceUI<UI_HPBar>(transform);
}
protected override void UpdateIdle()
{
Debug.Log("Monster UpdateIdle");
GameObject player = GameObject.FindGameObjectWithTag("Player");
if (player == null)
return;
float distance = (player.transform.position - transform.position).magnitude;
if (distance <= _sacnRange)
{
_lockTarget = player;
State = Define.State.Moving;
return;
}
}
protected override void UpdateMoving()
{
Debug.Log("Monster UpdateMoving");
// 플레이어가 내 사정거리보다 가까우면 공격
if (_lockTarget != null)
{
_destPos = _lockTarget.transform.position;
float distance = (_destPos - transform.position).magnitude;
if (distance <= _attackRange)
{
State = Define.State.Skill;
return;
}
}
// 이동
Vector3 dir = _destPos - transform.position;
if (dir.magnitude < 0.1f)
{
State = Define.State.Idle;
}
else
{
// TODO
NavMeshAgent nma = gameObject.GetComponent<NavMeshAgent>();
nma.SetDestination(_destPos);
nma.speed = _stat.MoveSpeed;
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(dir), 20 * Time.deltaTime);
}
}
protected override void UpdateSkill()
{
Debug.Log("Monster UpdateSkill");
}
void OnHitEvent()
{
Debug.Log("Monster onHitEvent");
}
}
선생님이 올리신 Prefab의 knight 가 아닌 asset store에서 다운 받은 (Warrior Pack Bundle 2 FREE) 입니다.
Unity Chan으로 실행시 잘 움직이고 선생님 자료로 Knight를 만들어서 작동시 잘 움직이지만
다운받은 Asset으로는 작동이 안되는데 이유를 잘 모르겠습니다.
https://drive.google.com/file/d/1bV4QnQceT30opv8t34qPgKt4bfctjut8/view?usp=drive_link
답변 1
-1
안녕하세요, 인프런 AI 인턴입니다.
요가인님, 몬스터의 애니메이션이 제대로 전환되지 않는 문제를 겪고 계시군요.
Animator에 설정된 상태에 따라 애니메이션이 바뀌지 않는 경우, 보통 몇 가지 문제를 먼저 확인해보아야 합니다.
Animator의 Transition 조건 확인:
Animator에서 WAIT
상태에서 RUN
상태로 올바르게 전이가 설정되어 있는지 확인해주세요. Transition 조건이 정확해야 애니메이션 상태가 변경됩니다.
Animator Parameter의 이름 확인:
코드에서 anim.CrossFade("WAIT", 0.1f);
와 같이 애니메이션 이름을 문자열로 직접 사용하고 있습니다. Animator 내부에서 사용된 Parameter 이름과 코드상의 문자열이 정확히 일치하는지 확인해주세요.
애니메이션 클립과 연결 확인:
Asset에서 가져온 애니메이션 클립이 Animator Controller에 올바르게 할당되어 있는지 확인해주세요. 또한, 각 애니메이션 클립이 정상적으로 재생되는 것을 테스트해보세요.
Prefab의 Override 문제:
Asset Store에서 다운받은 애니메이션을 사용하는 경우, 해당 Prefab 설정에 문제가 없는지 확인해야 합니다. 때때로 Prefab이나 애니메이션 클립에 오버라이드 설정이 잘못 적용된 경우 문제가 발생할 수 있습니다.
코드 문제:
UpdateMoving
및 기타 상태 업데이트 함수들이 호출되는 과정에서 State
프로퍼티가 올바르게 변경되고 있는지 확인해주세요. 코드에서 로그를 출력하여 상태 변환 과정을 추적해볼 수 있습니다.
제공해주신 구글 드라이브 링크에서 추가적인 정보를 얻을 수 없어 위와 같은 일반적인 문제 해결 방안을 안내드리게 되었습니다. 만약 문제가 계속 해결되지 않는다면, Animator와 Prefab 설정을 상세히 살펴본 후 추가적인 특이사항을 발견하시게 될 수 있습니다.
조금 더 구체적인 해결책을 원하시면 저희 인프런의 ‘문의하기’ 기능을 통해 좀 더 상세한 상황을 설명해주시면 도움을 드릴 수 있을 것 같습니다.
도움이 되시길 바라며, 문제가 빠르게 해결되기를 바랍니다.
이미 다 해보고 질문하는겁니다...
지금 몇번이고 이런 AI 답변만 달리는데
해결방안이 그럼 없는거에요?