유니티의 Assets Store에서는 다양한 무료 및 유료 에셋을 제공한다. 이번 게임 "어메이징 볼링"에서는 다음의 무료 에셋을 사용한다:
Window > Asset Store
를 선택한다.Download
또는 Import
를 클릭한다.using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
public class ShooterRotator : MonoBehaviour
{
private enum RotateState
{
Idle, Vertical, Horizontal, Ready
}
private RotateState state = RotateState.Idle;
public float verticalRotateSpeed = 360f;
public float horizontalRotateSpeed = 360f;
private void Update()
{
switch (state)
{
case RotateState.Idle:
if (Input.GetButtonDown("Fire1"))
{
state = RotateState.Horizontal;
}
break;
case RotateState.Horizontal:
if (Input.GetButton("Fire1"))
{
transform.Rotate(new Vector3(0, horizontalRotateSpeed * Time.deltaTime, 0));
}
else if (Input.GetButtonUp("Fire1"))
{
state = RotateState.Vertical;
}
break;
case RotateState.Vertical:
if (Input.GetButton("Fire1"))
{
transform.Rotate(new Vector3(-verticalRotateSpeed * Time.deltaTime, 0, 0));
}
else if (Input.GetButtonUp("Fire1"))
{
state = RotateState.Ready;
}
break;
case RotateState.Ready:
break;
}
}
}
이 코드는 Shooter Pivot 오브젝트에 부착되어, 발사 버튼(Fire1
)에 따라서 포신의 각도를 조절한다.
private enum RotateState
: 포신의 현재 상태를 나타내는 열거형. Idle, Vertical, Horizontal, Ready 총 4가지 상태가 있다.private RotateState state = RotateState.Idle;
: 초기 상태를 Idle로 설정한다.public float verticalRotateSpeed = 360f;
: 수직 회전 속도를 설정한니다.public float horizontalRotateSpeed = 360f;
: 수평 회전 속도를 설정합니다.private void Update()
: 프레임마다 상태를 체크하고, 해당 상태에 따라 동작을 수행한다.임포트한 에셋을 게임에 적용하기 위해선 프리팹(Prefab)으로 만드는 과정이 필요하다. 특히 파티클 시스템에서는 다음과 같은 옵션을 설정해야 한다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Ball : MonoBehaviour
{
public ParticleSystem explosionParticle;
public AudioSource explosionAudio;
public float maxDamage = 100f;
public float explosionForce = 1000f;
public float lifeTime = 10f;
private void Start()
{
Destroy(gameObject, lifeTime);
}
private void OnTriggerEnter(Collider other)
{
explosionParticle.transform.parent = null;
explosionParticle.Play();
explosionAudio.Play();
Destroy(explosionParticle.gameObject, explosionParticle.duration);
Destroy(gameObject);
}
}
public ParticleSystem explosionParticle
: 폭발 효과를 나타내는 파티클 시스템이다.public AudioSource explosionAudio
: 폭발 소리를 재생하는 오디오 소스이다.public float maxDamage = 100f
: 포탄이 가할 수 있는 최대 데미지이다.public float explosionForce = 1000f
: 폭발의 힘을 나타낸다.public float lifeTime = 10f
: 포탄의 수명이다.private void Start()
: 게임 오브젝트가 생성되면서 호출되는 메서드로, 여기에서 포탄의 수명을 설정한다.private void OnTriggerEnter(Collider other)
: 다른 오브젝트와 충돌이 감지되면 호출되는 메서드로, 폭발 효과와 소리를 재생하고, 포탄을 파괴한다.ShooterRotator.cs
에서 Unity의 Input 클래스를 이용하여 사용자의 입력을 이벤트 기반으로 처리한다. 이를 통해 게임 오브젝트의 상태를 더욱 정밀하게 제어할 수 있다.ShooterRotator.cs
내에서 포신의 상태를 열거형 (enum)으로 관리한다. 이는 상태 기계(Finite State Machine)의 간단한 형태로 볼 수 있으며, 복잡한 로직을 효과적으로 관리할 수 있다.Ball.cs
에서는 Unity의 물리 엔진을 활용하여 실시간 충돌 감지를 한다. 이를 위해 콜라이더와 트리거 이벤트를 활용한다.