인프런 커뮤니티 질문&답변

soso03185님의 프로필 이미지
soso03185

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진

몬스터 AI #2

_destPos가 계속 0인 상태입니다.

작성

·

381

0

(이전에 오류 해결해서 글 수정합니다!)

(질문)첫 감지를 통해 몬스터가 이동하면 플레이어가 어디에 있던  0,0,0으로 이동합니다.

몬스터가 움직이기 전에는 _destPos가 정상적으로 변하는데, 움직이기 시작하면 0으로 고정이 됩니다.

이러한 것들은 유니티와 연결해서 멈추고 확인해봤습니다!

그런데 플레이어는 문제 없이 계속 작동하고 있습니다..

답변 4

0

soso03185님의 프로필 이미지
soso03185
질문자

헐.. 감사합니다

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

한 줄이 빠져 있었네요.

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

최대한 디버깅을 해보면서 의심가는 코드의
메모리를 살펴보는 식으로 해결해야 합니다.
고민 후 원인 파악이 안 되면
전체 프로젝트 압축 후 rookiss@naver.com로 보내주시기 바랍니다.

0

soso03185님의 프로필 이미지
soso03185
질문자

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");

    }

}

soso03185님의 프로필 이미지
soso03185

작성한 질문수

질문하기