moonee-e3 님의 블로그
2024-05-25 같은 위치 반복해서 움직이는 적 본문
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();
}
}
}
코루틴으로 구현
'개발 일지 [3D | Dream Forest]' 카테고리의 다른 글
2024-06-14 | 포탈_닿으면 플레이어 위치 이동 (0) | 2024.06.22 |
---|---|
2024-05-31 | 3D에서 2D 스프라이트 화면에 맞게 나타내기 (0) | 2024.06.22 |
2024-05-28 시야각에 들어오면 죽이는 적 구현 (0) | 2024.06.21 |
2024-05-20 플레이어의 카메라 시점 변경 (0) | 2024.06.21 |
Dream Forest 개발 일지 날짜별 정리 (0) | 2024.06.20 |