본문 바로가기
IT Tip/(Unity) 슈팅 게임 만들기

[유니티 게임 만들기] 레이저로 적을 공격하기

by 연꽃연못 2020. 12. 21.
반응형

Step 5. 레이저로 적을 공격하기

 

전방에 적이 출현했으니 이제 때려잡을 차례에요. ^^ 저번에 총알 장전한거를 이번에 활용 할거에요. 유니티는 충돌했을때 판별하는 기능이 따로 있으니 쉽게 할 수 있어요. 

 

유니티를 기동시켜서 저번에 이어서 해볼께요. 

 

 

프리팹화 시킨 Enemy를 선택해주세요.

Add Component를 클릭해서 Pysics2DCircle Collider2D를 선택해주세요. 

 

 

추가가 되었으면 Enemy Prefab더블클릭해주세요. 

 

 

Scene 뷰에 보면 녹색동그라미가 보일거에요. 그게 Collider2D의 범위에요. 적당하게 줄여주는데 실제 사이즈보다 약간 더 큰게 나아요. 오브젝트가 만났을때의 판정이니 너무 딱 맞으면 눈으로 직접보면 너무 타이트한거처럼 느껴질수 있어요. 

 

 

이번에는 같은 방법으로 총알에도 똑같이 충돌범위를 넣어줄거에요. 

Bullets 선택 → Add Conponent  → Pysics2D → Circle Collider2D  → 범위조절

 

 

 

이제 준비는 됐어요. Bullets 프리팹이 선택되어 있는 상황에서 Is Trigger를 체크해주세요. 

 

 

충돌을 위해서는 두 게임 오브젝트가 Collider를 가지고 있어야 하고 둘중 하나의 게임 오브젝트는 Rigidbody 가지고 있어야 됩니다. 움직이는 게임 오브젝트가 Rigidbody를 가지고 있어야 합니다. ^^

 

Trigger는 두 개체가 충돌했을때 물리적 연산이 일어나지 않고 충돌을 감지하는 거에요. 어떤 느낌이냐면... 두 오브젝트가 만났을때 튕겨나가는게 아니라 통과해 버리는거에요. 

 

스크립트에서 Trigger는 3가지 옵션을 가질수 있는데 ...

void OnTriggerEnter(Collider collider) {}

OnTriggerEnter는 충돌이 시작되는 순간 호출됩니다. 

 

void OnTriggerStay(Collider collider) {}

OnTriggerStay는 충돌이 되고 있을때 매 프레임 호출됩니다. 

 

void OnTriggerExit(Collider collider) {}

OnTriggerExit는 충돌이 끝난후 호출이 됩니다. 

 

여기서 (Collider collider)는 함수 파라메터로 Collider객체가 들어오며 collider를 이용해 충돌한 GameObject를 처리할 수 있습니다. 

 

이번 게임에서는 총알이 날아가서 적과 부딪혔을때 둘다 없애버릴거에요. ^^

 

Bullets Prefab에 Add Conponent > Pysics2D Rigidbody2D추가해주세요. 

Rigidbody 2DBody TypeKinematic으로 선택해주세요. 

 

 

Kinematic은 물리 효과를 할거냐인데 선택되어 있으면 물리 효과를 적용하지 않는다는 거에요. 

 

총알 스크립트 (BulletController.cs)에 아래 내용을 추가 해주겠습니다. 

 

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

public class EnemyController : MonoBehaviour
{

    float fallSpeed;
	float rotSpeed;

    void Start () 
    {
		this.fallSpeed = 0.05f + 0.1f * Random.value;
		this.rotSpeed = 5f + 3f * Random.value;
	}
	
    void Update () 
    {
		transform.Translate(0, -fallSpeed, 0, Space.World);
		transform.Rotate(0, 0, rotSpeed );
		if (transform.position.y < -7.5f) {
			Destroy (gameObject);
		}
	}

	// 추가되는 부분
	void OnTriggerEnter2D(Collider2D collider) 
    {
       // 충돌했을때 오브젝트를 삭제
       Destroy(collider.gameObject);
       Destroy(gameObject);
	}
}

 

추가한것은 제일 밑에 void OnTriggerEnter입니다. 

 

void OnTriggerEnter2D(Collider2D collider) 
{
    // 충돌했을때 오브젝트를 삭제
    Destroy(collider.gameObject);
    Destroy(gameObject);
}

 

이제 슬슬 동작 확인을 해보겠습니다. 

총알이 적에게 닿았을때 둘다 사라지면 ok입니다. ^^

 

 

이만큼으로도 게임이 얼추 된것 같은 느낌이에요 ^^ 

앞으로는 좀더 다듬는 작업만 남아 있어요. 다음 시간은 게임상태를 설정할거에요. 지금은 그냥 요시땅도 없이 흘러가 버리니까 일단 게임 상태를 설정해서 각각의 기능을 줘야되요. 

 

추운데 건강 조심하세요. ^^

반응형

댓글