4. 포탄처리, 5. 목표물만들기, 사운드처리

MOON·2022년 7월 10일
0
post-thumbnail

포탄 발사


포탄 오브젝트 만들기
Sphere 생성 : 이름 > Bullet
속성 : Scale(0.2, 0.2, 0.5)
머터리얼 생성 후 적용 : Bullet(빨간색)
Rigidbody 컴포넌트 추가
프리팹으로 만든 후 Hierarchy뷰에서 제거

여기서 Rigidbody를 사용하면 물리엔진으로 동작되며 충돌 효과를 낼때 필요한 컴포넌트입니다.

포탄을 만들었으면 포탄의 생성위치를 지정해주어야 합니다.
빈 오브젝트 생성 : spPoint
GunBarrel 오브젝트의 하위 오브젝트로 옮김
빈 오브젝트를 GunBarrel 앞에 위치 시킨다.

이제 Bullet.cs 스크립트를 새롭게 만든후 bullet프리팹에 등록한다.

GetComponent<>() 를 통해 물리엔진을 가져와 AddForce를 통해 forward 방향으로 힘을 가하여 포탄이 나가게 됩니다.

이제는 기존에 작성한 Tack.cs 스크립트를 수정합니다.

포의 발사 속도, 총알 오브젝트를 할당하기 위한 변수, 총알의 생성위치를 저장하기 위한 변수를 선언합니다.

총알의 생성위치는 GameObject.Find로 spPoint라는 오브젝트의 위치를 찾아내 저장합니다.

if(Input.GetMouseButtonDown(0))은 조건문으로 왼쪽 마우스 버튼이 눌러졌을때를 말하며, 인자값이 0은 왼쪽 버튼, 1은 오른쪽 버튼을 말하며 프로젝트 세팅에서 변경이 가능하다.

Instantiate는 복제할때 사용하며 (생성할 오브젝트, 생성위치, 생성시 회전값)을 인자값으로 가진다.

bullet의 물리엔진을 가져와 적용시켜 발사시킨다.
Bullet프리팹을 Tack 스크립트의 Bullet에 등록하면 된다.

이것까지 완료하면 왼쪽 마우스 버튼을 누르면 총알이 나간다. 총알 속도는 적절히 조절하면 된다.


포탄 삭제하기

계속 마우스 클릭하면 포탄(게임 오브젝트)이 만들어진 객체가 메모리에 올라가 있음
일정 시간이 지나면. 게임오브젝트를 없애주어야 함 -> Destory() 함수 사용

Destroy(삭제할 GameObject, 몇초뒤에 사라지게 할것인가)

public float DestroyTime = 2.0f;

포탄이 사라질 시간을 변수로 선언한다.

Destroy(bullet, DestroyTime);

이것을 마우스 클릭이 되었을 경우 생성 된 후에 삭제하도록 한다. 방금 적은 if문에 적도록 하자.

중요 함수

GameObject 생성 -> Instantiate()
GameObject 삭제 -> Destroy()

이것으로 포탄처리를 완료하였다.


목표물 맞추기

목표물이 벽을 만들어보자.
Cube를 생성 : Wall 이라고 이름 변경
위치(0, 0, 0) / Scale(2.0, 2.0, 1.0)
Wall 메터리얼 만들기
구글에서 “Wall Texture” 이미지 다운로드
새로운 메터리얼 생성 : Wall
Wall머터리얼을 Wall Object에 적용
Wall오브젝트를 프리팹으로 만들고 하이어라키 창에서 지움
프리팹의 Wall를 씬에 몇 개를 옮겨 배치 하도록 하자

그러면 포탄의 Collider를 확인할것이 있다. is Trigger이라는 칸을 체크해줄경우 통과가 가능해진다. 충돌 관련 함수는 나중에 자세히 알아보겠다.

Trigger을 체크해두었으니 스크립트로 활용하자. Bullet.cs를 수정하자.



void OnTriggerEnter(Collider col) 이 부분이 Trigger이 발생하는 함수이다.
목표물과 부딪힐때 발생하며 col은 부딪친 오브젝트를 나타낸다.
Destroy 함수를 통해 부딪친 오브젝트인 벽을 없애고, 총알을 없앤다.

여기서 벽에만 Trigger가 발생하도록 설정하기 위해 Tag를 설정해야 한다.

Add Tag를 통해 WALL를 추가 후 벽에 적용시켜준다.

if (col.gameObject.tag == "WALL")
{
	Destroy(col.gameObject);
}

이런식으로 .tag를 이용하여 부분적으로 적용이 가능하다.


사운드 처리

교수님께서 주신 강의 자료에서 사운드 파일을 다운로드 합니다.

public AudioClip sound;

오디오 클립을 할당할 변수를 선언한뒤

AudioSource.PlayCliptPoint(sound, transform.position);

사운드라는 파일을 transform.position의 위치에서 재생시킨다는 코드이다.
Trigger함수에 적어두면 된다.

profile
나만의 공간

0개의 댓글