
오늘 학습 키워드
유니티 숙련 팀 프로젝트
오늘 학습 한 내용을 나만의 언어로 정리하기
몬스터 만들기
아이디어
- 일단 몬스터를 세 종류 만듬
- 전사, 도적, 법사
- 그리고 그 몬스터들을 미리 배치해둔 정의인 프리셋을 만들어둠
- 팩토리 패턴을 사용해서 몬스터 매니저를 만들거임.
세 종류의 몬스터들

- 잘 따라오면서 날 때림
- 내가 날 때리는 애를 만들어야 한다는 점이 좀 거시기하지만 괜찮음
원거리 몬스터를 만듭시다
- 기본 몬스터를 상속받는 RangeMonster를 제작
public class RangeMonster : Monster
{
[Header("Range Weapon Settings")]
public GameObject projectilePrefab;
public Transform projectileSpawn;
public float projectileSpeed;
public Vector3 projectileRotation;
public override void Attack()
{
base.Attack();
if (animator != null)
{
animator.speed = 1f;
Debug.Log("원거리 공격");
animator.SetTrigger("Attack");
Vector3 playerDirection = (CharacterManager.Instance.Player.transform.position - transform.position).normalized;
GameObject projectile = Instantiate(projectilePrefab, projectileSpawn.position, Quaternion.LookRotation(playerDirection));
projectile.transform.Rotate(projectileRotation);
Rigidbody rb = projectile.GetComponent<Rigidbody>();
if(rb != null) rb.AddForce(playerDirection * projectileSpeed, ForceMode.Impulse);
}
}
}투사체를 만듭시다
- 투사체를 만들어서 날리게 함
public class MonsterProjectile : MonoBehaviour
{
private void OnCollisionEnter(Collision other)
{
if (other.collider.CompareTag("Player"))
{
Debug.Log("플레이어가 맞았다!");
// TODO : 플레이어 맞은거 처리
}
else if (other.collider.CompareTag("Ground"))
{
Destroy(gameObject);
}
}
}딴 곳을 보면서 투사체만 나한테 날려요
- Attack 하기 전에 내 쪽을 보도록 수정함
void AttackingUpdate()
{
// 플레이어와의 거리가 공격 범위 내에 있고, 시야각 내부에 있을 때
if (playerDistance < attackDistance && IsPlayerInFieldOfView())
{
agent.isStopped = true;
// 플레이어 방향 바라보기
Vector3 lookDirection = (CharacterManager.Instance.Player.transform.position - transform.position).normalized;
lookDirection.y = 0; // 고개 안꺾이게
if (lookDirection != Vector3.zero)
{
Quaternion targetRotation = Quaternion.LookRotation(lookDirection);
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime * 5f);
}
if (Time.time - lastAttackTime > attackRate)
{
lastAttackTime = Time.time;
Attack();
}
}잊지말자
- alt 누르고 위 아래 방향키 누르면 줄이 째로 이동됨