강의

멘토링

로드맵

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

soso03185님의 프로필 이미지
soso03185

작성한 질문수

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

몬스터 AI #2

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

작성

·

497

0

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

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

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

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

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

퀴즈

48%나 틀려요. 한번 도전해보세요!

Unity 게임 개발 프레임워크에서 Manager를 사용하는 주된 목적은 무엇일까요?

특정 오브젝트의 애니메이션을 제어하기 위해서

자주 사용되는 기능이나 시스템을 중앙에서 관리하기 위해서

캐릭터의 스탯 값을 저장하기 위해서

게임 씬의 배경 음악을 재생하기 위해서

답변 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

작성한 질문수

질문하기