using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
public class HeroController : MonoBehaviour
{
public Transform target;
private Vector3 targetPosition;
private Animator anim;
private bool isMove = false;
public float moveSpeed = 2f;
// Start is called before the first frame update
void Start()
{
this.anim = GetComponent<Animator>();
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
Debug.DrawRay(ray.origin, ray.direction * 1000f, Color.red);
RaycastHit hitData;
//ray와 충돌하면
if (Physics.Raycast(ray.origin, ray.direction, out hitData))
{
this.targetPosition = hitData.point;//좌표라 Vector3로 targetPosition해줌.
this.transform.LookAt(hitData.point);
this.anim.SetInteger("State", 1);
isMove = true;
}
}
if (isMove)
{
this.transform.Translate(Vector3.forward * this.moveSpeed * Time.deltaTime);
float distance = Vector3.Distance(this.transform.position, this.targetPosition);
if (distance <= 0.9f)
{
isMove = false;
this.anim.SetInteger("State", 0);
}
}
}
private void OnCollisionEnter(Collision collision)
{
if(collision.gameObject.tag == "target")
{
this.anim.SetInteger("State", 2);
}
}
}
뭔가 .. 잘모르겠다
타겟을 만나면 State,2를 실행하고싶은데 만나도 잘 실행이 안된다.
이 부분에서 distance <= 0.1f로 했을 땐 몬스터안이 Raycast로 지정되서 캐릭터가 무한으로 움직이고
target 인식을 하는데 계속 State 1상태가 유지되서 공격을 못하는 것 같다. 어떻게 해결해야할지..
분명히 OnCollisionEnter에 Debug.Log("2122"); 이런식으로 넣으면 인식은 되는데 흠.. 뭔가 물체를 닿으면 멈추게 하라고 하고싶은데 어떻게 해야할지 고민해봐야할것같다.
'유니티 기초' 카테고리의 다른 글
로비씬, 사과, 폭탄 - [능력구현, 로비씬구현, 게임구현, 게임종료화면 미구현] (0) | 2023.08.07 |
---|---|
챕터 8 AppleCatch (0) | 2023.08.07 |
3D 유니티 LookAt, 유니티 짱, Raycast, 클릭한 위치로 이동 (0) | 2023.08.04 |
챕터7 밤송이 [수정필] (0) | 2023.08.04 |
pixel_sword (0) | 2023.08.03 |