김김김의 게임개발
  • 유니티 게임개발 입문 #8
    2023년 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);
        }
    }

    댓글