Unity-Homework-몬스터 이동&공격(수정중)
-몬스터를 클릭하면 몬스터에게 이동 & 공격
-바닥을 클릭하면 해당 위치로 이동
애니메이션을 넣고 몬스터에게 이동하기까지는 되는데,
몬스터와 만나면 공격하는 것을 구현하는 부분에서 오류가 발생했다.
뭔가 애니메이션이 충돌하는거 같은데, 일단 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 |