-
카테고리
-
세부 분야
게임 프로그래밍
-
해결 여부
미해결
_destPos가 계속 0인 상태입니다.
21.06.03 16:23 작성 조회수 317
0
(이전에 오류 해결해서 글 수정합니다!)
(질문)첫 감지를 통해 몬스터가 이동하면 플레이어가 어디에 있던 0,0,0으로 이동합니다.
몬스터가 움직이기 전에는 _destPos가 정상적으로 변하는데, 움직이기 시작하면 0으로 고정이 됩니다.
이러한 것들은 유니티와 연결해서 멈추고 확인해봤습니다!
그런데 플레이어는 문제 없이 계속 작동하고 있습니다..
답변을 작성해보세요.
0
0
0
Rookiss
지식공유자2021.06.03
최대한 디버깅을 해보면서 의심가는 코드의
메모리를 살펴보는 식으로 해결해야 합니다.
고민 후 원인 파악이 안 되면
전체 프로젝트 압축 후 rookiss@naver.com로 보내주시기 바랍니다.
0
![soso03185님의 프로필](https://cdn.inflearn.com/public/main/profile/default_profile.png?w=48)
soso03185
질문자2021.06.03
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class MonsterController : BaseController
{
Stat _stat;
[SerializeField]
float _scanRange = 10f;
[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 <= _scanRange)
{
_lockTarget = player;
State = Define.State.Moving;
return;
}
}
protected override void UpdateMoving()
{
//플레이어가 내 사정거리보다 가까우면 공격
if (_lockTarget != null)
{
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
{
NavMeshAgent nma = gameObject.GetOrAddComponent<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");
}
}
답변 4