유니티 C# 3일차(onTriggerEnter, Tag, Destroy)

Posted by ITPangPang
2016. 5. 8. 15:48 Unity3D/C#


유니티 C# 3일차

(onTriggerEnter, Tag, Destroy)


ㆍ 오늘은 onTriggerEnter를 써보려고 합니다.

    모든 게임에서 (캐릭터 - 캐릭터), (캐릭터-사물)

    (사물-사물) 결국 오브젝트간 충돌은 없어서는 안되는

    중요한 부분입니다.

    onTriggerEnter는 충돌을 인식하는 방법중 한가지입니다


    


시작하기 전에

제목에는 onTiggerEnter라고만

적었지만

실제로 onTrigger의 종류는

onTriggerEnter, onTriggerExit, onTriggerStay

3가지 입니다


오늘은 간단하게 onTriggerEnter만

써보겠습니다.


오늘 최종 결과물입니다.


저용량으로 하느라

살짝 끊기는감이 있지만..


오늘 최종목표는 키보드로

공을 움직여서 Cube와 충돌하는

순간 Cube를 파괴하는 겁니다

(먹는 느낌?)



첫번째로

Object 배치

를 하겠습니다


이건 뭐 배치하기 나름인데..

중요한 부분이 아니므로

Plane, Sphere를 하나씩 만들고

Cube를 하나 만듭니다


이런식으로 대충 만들고


그 다음 Sphere,Cube에 

색(Material)을 입혀보겠습니다.


Create - Material

생성해서 Blue, Black을

만들겠습니다.


그 다음 

Cube에 Black

Sphere에 Blue를

드래그앤 드롭으로

추가시킵니다


다음은

충돌을 인식하기 위해서

Collider에서 Is Trigger를 체크하고

물리적제어를 허용하기 위해

Rigidbody를 추가시킵니다


음 Rigidbody는

Add Component 누르고 

Rigidbody검색하시면 됩니다

리지드바디 추가 및 설명은

http://itpangpang.xyz/161

이쪽에 나와있습니다


자 이제

기본셋팅은

끝났으므로 이제

c# 스크립트를 

작성해보겠습니다


사실 계속 지난글꺼와

연관시키느라

추가되는 부분은 거의없습니다


지난글에서 사용했던

키보드로 오브젝트 움직이는

스크립트에다가

이번에 사용할 코드를 

추가시키겠습니다

using UnityEngine;

using System.Collections;


public class Day3: MonoBehaviour {


int speed = 5;

// Use this for initialization

void Start () {

}

// Update is called once per frame

void Update () {

moveObject ();

}


void moveObject()

{

float keyHorizontal = Input.GetAxis("Horizontal");

float keyVertical = Input.GetAxis("Vertical");


transform.Translate(Vector3.right * speed * Time.smoothDeltaTime * keyHorizontal , Space.World);

transform.Translate(Vector3.forward * speed * Time.smoothDeltaTime * keyVertical , Space.World);

}

void OnTriggerEnter(Collider other) {

if (other.transform.tag == "Cube") {

Destroy(other.gameObject);

}

}

}

자 보면

아래 빨간글씨만

추가되었습니다.


워낙 코드자체가

이해하기 쉬운형태라서


위에서 Collider에서

Is Trigger체크함으로써

OnTriggerEnter가 

작동을 하게 됩니다


파라미터에 Collider other이

있습니다.


Sphere와 부딪히는 물체가

other입니다.


if(other.transform.tag == "Cube")

부딪히는 물체의 태그가 Cube이면

조건문을 실행하겠다는 내용입니다

(태그는 잠시후에 붙여보겠습니다)


Destory(other.gameObject);

이 부분이 부딪히는

물체가 파괴?(먹히는듯한)

부분입니다.

코드 그대로 받아들이시면 됩니다

other이 파괴된다.


여기까지 작성을 완료했으면

c#스크립트를

드래그앤드롭으로 

Sphere에 붙여넣습니다


자 다음은 

부딪힘을 당하는? Cube에

Tag를 추가시키겠습니다.


Cube를 선택하고

오른쪽 Inspector에서

상단부분에 

Tag - Untagged - Add tag..

를 선택해줍니다




Tags&Layers

창이 뜨면

Tag를 추가해서

"Cube"라고 적어줍니다


자 만들었으면

다시 Cube로 돌아와서

추가된 Cube를 태그로 달아줍니다


자 여기까지 완료했으면

이제 게임을 실행시키고

Cube와 충돌하면 사라지는것을

확인 할 수 있습니다.


처음 결과물처럼 하는건 그냥

Cube를 누르고 

Ctrl+D 누르면 복제가 되는데

원하는 만큼, 원하는 위치에

생성해서 배치시키면 끝납니다


오늘의 유니티 C# 공부

onTriggerEnter는 여기까지

하겠습니다