Unity-Homework-몬스터 이동&공격(수정중)
2023. 8. 6.

-몬스터를 클릭하면 몬스터에게 이동 & 공격

 

 

-바닥을 클릭하면 해당 위치로 이동

PlayerController에 바닥 클릭시 해당 위치로 이동구현

애니메이션을 넣고 몬스터에게 이동하기까지는 되는데,

몬스터와 만나면 공격하는 것을 구현하는 부분에서 오류가 발생했다.

뭔가 애니메이션이 충돌하는거 같은데, 일단 attack함수는 실행되지도 않은 것같아서 이유를 모르겠다.

if문 막 써서 꼬인것 같긴한데..

웃긴건 시작하자마자 몬스터를 클릭하면 만나자마자 애니메이션 충돌하는거로 나오는데,

다른 지점을 돌아다니다가 몬스터를 클릭하면 그냥 통과되어버린다.

이 부분은 내가 forward하고 몬스터 클릭을 쓰다말아서 그런가..

근데 또 태그는 로그에 나온단말이지..

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class playerController : MonoBehaviour
{
    public GameObject followMonster;//monster 게임오브젝트
    bool isMoveForward = false;
    bool isMoveToMonster = false;
    bool isStop = false;
    float speed = 0.1f;//이동 속도
    private Vector3 targetPosition;
    Vector3 dir = new Vector3(0, 0, 10);
    Animator anim;
    // Start is called before the first frame update
    void Start()
    {
        this.anim = GetComponent<Animator>();
        this.followMonster = GameObject.Find("Monster");
    }

    // Update is called once per frame
    void Update()
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;
        if (isMoveForward == true)
        {       
            isMoveToMonster = false;
            isStop = false;
            MoveForward();
        }
        else if (isMoveToMonster == true)
        {
            
            isMoveForward = false;
            isStop = false;
            MoveToMonster();
        }
        else if (isStop == true)
        {
           
            isMoveToMonster = false;
            isMoveForward = false;
            Attack();
        }



        if (Input.GetMouseButtonDown(0))//마우스 좌클릭
        {
            Debug.Log("MouseButtonDown(0)");
            //화면 좌표를 월드상의 Ray 객체로 만든다.
            
            //화면에 Ray 출력
            Debug.DrawRay(ray.origin, ray.direction * 100f, Color.red, 2f);

            
           
            //Ray의 충돌체크
            if (Physics.Raycast(ray.origin, ray.direction, out hit))
            {//충돌되면 충돌정보가 hit변수에 담김            
                Debug.Log(hit.point);//충돌된 지점의 월드 좌표
                //this.transform.position = hit.point;//충돌 지점으로 player 이동
                this.targetPosition = hit.point;//targetPosition저장
                this.transform.LookAt(hit.point);//hit.point를 쳐다봄
                float distance = Vector3.Distance(this.transform.position, this.targetPosition);

                if (hit.transform.gameObject.tag == "Monster")//몬스터 클릭시
                {
                    if (distance != 0)
                    {
                        Debug.Log(hit.transform.gameObject);
                        isMoveToMonster = true;//몬스터에게 이동
                        if(distance == 0)
                         {
                            Debug.Log("distance0");
                            isStop = true;
                           
                             }
                    }
                    
                    //Debug.Log(distance);
                }
                else
                {                
                    this.isMoveForward = true;
                   
                }
            }


        }

       
    }
    public void MoveForward()
    {//Forward 버튼을 onclick 하면 작동
        this.anim.SetInteger("State", 1);//moveforward
        Vector3 dir = new Vector3(0, 0, 10);
        float speed = 0.1f;      
        this.transform.Translate(dir * speed * Time.deltaTime);
        
    }
    public void MoveToMonster()
    {
        if (isMoveToMonster == true)
        {
            this.transform.LookAt(followMonster.transform);      
            this.anim.SetInteger("State",2);//run animation     
            this.transform.Translate(dir * speed * Time.deltaTime);
        }
       
    }
    public void Attack()
    {if (isStop == true)
        {
            this.speed = 0;
       //  this.transform.position = this.followMonster.transform.position;         
            this.anim.SetInteger("State", 4);//attack
            Debug.Log("Attack Monster");
        }
    }
}

 

'C# 기초 Homework' 카테고리의 다른 글

활쏘기 연습-궁수의 전설  (0) 2023.08.20
복소수와 사원수, 벡터  (1) 2023.08.13
미션-보상 만들기  (2) 2023.07.31
디자인 패턴& 싱글톤 패턴,Dictionary 검색  (0) 2023.07.26
2048  (0) 2023.07.26
myoskin