유니티 게임 개발(9)

Proffeine0327·2023년 6월 2일

Unity Basic Development

목록 보기
9/11
post-thumbnail
  1. Enemy (적)

플레이어와 총알을 만들었다.
이제 적을 만들어보자.

플레이어 만들듯이 Square로 만든다음 boxcollider2d, rigidbody2d를 부착하고 Enemy 레이어
를 추가해준다음, Enemy 클래스를 만들어서 달아주겠다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Enemy : MonoBehaviour
{
    public float maxHp;
    
    private float curHp;

    public void Damage(float amount)
    {
        curHp -= amount;
    }
    
    private void Awake() 
    {
        curHp = maxHp;    
    }

    private void Update() 
    {
        if(curHp <= 0) Destroy(gameObject);
    }
}

그리고 총알 스크립트를 수정하겠다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Bullet : MonoBehaviour
{
    public float range; //1)
    public float speed;
    public Vector2 dir;

    private void Start() 
    {
        Destroy(gameObject, 3);
    }

    private void Update() 
    {
        transform.Translate(dir.normalized * speed * Time.deltaTime);
        var hit = Physics2D.OverlapCircle(transform.position, range, LayerMask.GetMask("Enemy")); //2)
        if(hit != null)
        {
            hit.GetComponent<Enemy>()?.Damage(10); //3)
            Destroy(gameObject);
        }
    }
}
  1. 총알의 감지 범위를 정하는 변수이다 (총알의 Scale값으로 하면 된다)
  2. 원형의 범위를 감지하는 코드이다. LayerMask.GetMask를 이용해서 Enemy 레이어만을 감지한다.
  3. ?. 는 앞쪽의 함수의 값이 null이면 뒤의 함수를 실행하지 않겠다는 의미이다.
    만약 가져온 Collider에 Enemy 컴포넌트가 없으면 Damage를 실행하지 않을것이다.
profile
Programmer needs Caffeine / 공부하는 학생

0개의 댓글