Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

moonee-e3 님의 블로그

2024-05-25 같은 위치 반복해서 움직이는 적 본문

개발 일지 [3D | Dream Forest]

2024-05-25 같은 위치 반복해서 움직이는 적

moonee-e3 2024. 6. 22. 13:59
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BearEnemy : MonoBehaviour
{
    public float moveSpeed;
    public float rotateSpeed;
    public Transform startPos;
    public Transform endPos;
    private Transform desPos;

    private Transform TargetPos;

    public void Start()
    {
        transform.position = startPos.position;
        desPos = endPos;
    }

    IEnumerator Enemyturn()
    {
        float time = 0.0f;

        while (time < 2.0f)
        {
            time += Time.deltaTime;

            Vector3 dir = TargetPos.position - transform.position;
            dir.Normalize();
            Quaternion TargetRotation = Quaternion.LookRotation(dir); //위에서 구한 목표 방향(Vector3)을 사분위수로 전환하는 메서드
                                                                      //회전값 적용
            
            Quaternion rotateAmount = Quaternion.RotateTowards(transform.rotation,
                TargetRotation, rotateSpeed * Time.deltaTime); //(시작값, 목표값, 회전 속도)를 인자로 받아 회전 값을 연산해주는 메서드 
            transform.rotation = rotateAmount;
        }
        yield return null;
    }
    // 코루틴 https://wergia.tistory.com/226

    void FixedUpdate()
    {
        Move();
    }

    public void Move()
    {
        transform.position = Vector3.MoveTowards(transform.position,
            desPos.position, Time.deltaTime * moveSpeed);

        if (Vector3.Distance(transform.position, desPos.position) <= 0.1f)
        {
            if (desPos == endPos)
            {
                TargetPos = startPos;
                desPos = startPos;
                
            }
            else
            {
                TargetPos = endPos;
                desPos = endPos;
                
            }
            StartCoroutine(Enemyturn()); // 회전 속도
        }
    }
    // 회전 코드 참고 https://suspiciously-useful.tistory.com/39
    // Quaternion 함수 참고 https://velog.io/@yjy1175/%EB%A9%B4%EC%A0%91%EA%B8%B0%EC%88%A0Unity%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8A%B8%EC%9D%98-%ED%9A%8C%EC%A0%84
    // Quaternion 연산 참고 https://blog.naver.com/heennavi1004/222203371540

    private void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.CompareTag("Player"))
        {
            Player.Die();
        }
    }
}

 

 

코루틴으로 구현