방명록
- 유니티 게임개발 입문 #82023년 09월 13일 21시 23분 11초에 업로드 된 글입니다.작성자: noun06
버그 수정
- 파티클 시스템과 플레이어 충돌 버그는 그리드 수정 시 프리팹화 문제로 인해서 작동하지 않을걸 다시 수정하여 해결.
- 체력아이템이 중첩되는 버그는 일정 체력 이하일때만 아이템이 적용되는 방식으로 수정하여 해결.
엔딩 씬
- 엔딩 씬은 절망적인 엔딩상황의 느낌을 극대화하기 위해 3D로 작업을 하기로 하였음.
- 블렌더에서 지구를 잘게 잘라 fbx로 유니티로 로드하여 각 조각에 rigidbody와 mesh collider을 넣어 지구 파괴 효과를 구현하였음.
- 테스트를 위해서 충돌 파워, 충돌을 일으킨 오브젝트의 파괴 등 다양한 기능을 스크립트에 넣었고 충돌 시 사운드와 파티클 시스템이 재생됨.
- 팀원분이 만든 다른 방식의 엔딩씬과 합치는 작업을 진행하였음.
using UnityEngine; public class Breakable : MonoBehaviour { [SerializeField] private GameObject _replacement; [SerializeField] private float _breakForce = 2; [SerializeField] private float _collisionMultiplier = 100; [SerializeField] private bool _broken; [SerializeField] private ParticleSystem _explosionParticleSystem; [SerializeField] private AudioSource _audioSource; public AudioClip collisionSound; void OnCollisionEnter(Collision collision) { if (_broken) return; if (collision.relativeVelocity.magnitude >= _breakForce) { _broken = true; if (_explosionParticleSystem != null) { _explosionParticleSystem.Play(); } // 충돌 사운드 재생 if (_audioSource != null && collisionSound != null) { _audioSource.clip = collisionSound; _audioSource.Play(); } var replacement = Instantiate(_replacement, transform.position, transform.rotation); var rbs = replacement.GetComponentsInChildren<Rigidbody>(); foreach (var rb in rbs) { rb.AddExplosionForce(collision.relativeVelocity.magnitude * _collisionMultiplier, collision.contacts[0].point, 2); } Destroy(gameObject); } } }
사운드 매니저
- 게임 플레이 씬 내에서 다양한 효과음들을 간편하게 호출하기 위한 사운드 매니저를 제작함. 싱글톤으로 작성이 되어 소리가 나야하는 다른 스크립트 부분에 추가하는 방식으로 공 충돌, 운석 충돌 등의 사운드를 추가함.
using UnityEngine; public class NewSoundManager : MonoBehaviour { public static NewSoundManager instance; public AudioClip playerBallCollisionSound; public AudioClip ballMeteorCollisionSound; public AudioClip playerItemPickupSound; public AudioClip playerMeteorCollisionSound; private AudioSource audioSource; private void Awake() { if (instance == null) { instance = this; DontDestroyOnLoad(gameObject); } else { Destroy(gameObject); } audioSource = GetComponent<AudioSource>(); } public void PlayPlayerBallCollisionSound() { audioSource.PlayOneShot(playerBallCollisionSound); } public void PlayBallMeteorCollisionSound() { audioSource.PlayOneShot(ballMeteorCollisionSound); } public void PlayPlayerItemPickupSound() { audioSource.PlayOneShot(playerItemPickupSound); } public void PlayPlayerMeteorCollisionSound() { audioSource.PlayOneShot(playerMeteorCollisionSound); } }
다음글이 없습니다.이전글이 없습니다.댓글