
Monster M_VE - 2

Monster M_VE - 2 기본정보
요청사항
- Player를 탐색하지 않는 경우에는 Idle 애니메이션 재생
- Player를 탐색한 경우에는 Attack 애니메이션 재생 후 총알 발사
- 제자리에 가만히 있다가 공격만 하는 몬스터로 Player를 한 번 탐색하면 사거리가 늘어나는 몬스터
필요한 변수들 선언
using System.Collections;
using UnityEngine;
public class M_VE_2 : MonsterBase
{
public float AttackCoolTime;
public GameObject BulletPrefab; // 발사할 총알 프리팹
public Transform FirePoint; // 총알 발사 위치
public float BulletSpeed = 10f; // 총알 속도
...
}
각각의 변수는 쓰임새를 알 수 있도록 이름을 지었다.
기본 함수(Start, Update)
using System.Collections;
using UnityEngine;
public class M_VE_2 : MonsterBase
{
...
protected override void Start()
{
base.Start();
monsterType = MonsterType.M_VE_2;
StartCoroutine(MonsterRoutine());
}
// Update is called once per frame
void Update()
{
}
...
}
타 몬스터들과 유사하게 기본 함수에서는 타입 지정과 코루틴을 시작하게 만들었다.
코루틴 관련 함수
using System.Collections;
using UnityEngine;
public class M_VE_2 : MonsterBase
{
...
public override IEnumerator MonsterRoutine()
{
while (true)
{
if (!DetectionSuccess && DetectionPlayerPosition())
DetectionSuccess = true;
if (DetectionSuccess)
{
// Debug.Log("Player 탐지 완료");
DetectingAreaR = 15.0f;
yield return AttackPreparation();
}
yield return null;
}
}
public override IEnumerator AttackPreparation()
{
if (!MAnimator.GetBool("Detected"))
{
MAnimator.SetBool("Detected", true);
yield return new WaitForSeconds(1.30f);
DetectingAreaR = 15;
AttackCoolTime = 1;
}
MAnimator.SetTrigger("Shot");
yield return new WaitForSeconds(1.05f);
DetectionPlayerPosition();
Fire();
yield return new WaitForSeconds(AttackCoolTime);
}
...
}
M_V1처럼 탐색 후 사거리가 늘어나도록 만들었다.
또한 쿨타임마다 총알을 발사하게 만들어줬다.
공격 함수
using System.Collections;
using UnityEngine;
public class M_VE_2 : MonsterBase
{
...
private void Fire()
{
GameObject bullet = Instantiate(BulletPrefab, FirePoint.position, FirePoint.rotation);
Physics2D.IgnoreCollision(bullet.GetComponent<Collider2D>(), GetComponent<Collider2D>());
Vector2 fireDirection = (TargetPosition - FirePoint.position).normalized;
Rigidbody2D rb = bullet.GetComponent<Rigidbody2D>();
rb.velocity = fireDirection * BulletSpeed;
}
}
몬스터 내부에서만 쓰이므로 private으로 정의했다.
몬스터와 총알이 바로 충돌하지 않도록 충돌 처리 후 Rigidbody를 이용해 총알을 발사시켰다.
참고 사항
MonsterBase
[Unity] Monster Base 구현
MonsterBase의 구현프로젝트에서 몬스터를 구현을 담당하게 되어서 몬스터 스크립트의 베이스가 되는 MonsterBase를 만들어봤다. 필요한 변수들의 선언using System.Collections;using System.Collections.Generic;usin
gdoo.tistory.com
마무리하며..
기존에 만들어둔 몬스터 알고리즘에서 약간의 수정만 해서 만들었다.
큰 어려움 없이 완성했다.
'Unity > Hackers Window' 카테고리의 다른 글
[Unity] UI 1 : HUD (0) | 2024.11.19 |
---|---|
[Unity] UI Manager 구현 (0) | 2024.11.18 |
[Unity] Monster 구현 : M_VE - 1 (1) | 2024.11.16 |
[Unity] Monster 구현 : M_V3 (0) | 2024.11.15 |
[Unity] Monster 구현 : M_V2 (0) | 2024.11.14 |