와챠의 우당탕탕 코딩 일기장

[유니티] 스파르타 코딩 : 게임 개발 - 3주차 본문

코딩 일기장/Unity

[유니티] 스파르타 코딩 : 게임 개발 - 3주차

minWachya 2021. 6. 19. 23:21
반응형

오늘 만든 것

원랜 소리까지 들림!!

 

오늘 한 것

  • 배경 추가
  • 이미지 뎁스 바꾸기(배경은 뒤로, 캐릭터, 물체들은 앞으로)
  • 적 공격하기(Colider 이용)
  • 게임 오버 구현(처음으로 돌아가기)
  • 싱글톤 이용하기(GameManager, SoundManager)
  • BGM, 공격 사운드(효과음) 추가
  • 코인 먹으면 점수 얻고 코인 없어지기 구현

 

오늘 배운 것 정리

  • https://opengameart.org/ 에서 무료로 배경, 사운드 소스 얻을 수 있음
    • 맘에 드는 거 다운로드해서 드래그 앤 드롭 해주면 됨
  • 이미지 뎁스 바꾸기
    • 이미지 뎁스 : 이미지들이 겹칠 때, 누가 앞으로 나오고 누가 뒤로 가는지 정해주는 것
    • 게임 오브젝트의 Sprite Renderer 컴포넌트 > Order in Layer로 조정
      • Order in Layer 값이 크다 : 이미지 앞으로
      • Order in Layer 값이 작다 : 이미지 뒤로
  • 적 공격하기(밟기)
    • OnTriggerEnter2D 함수 안에 if (collision.gameObject.tag == "enemy")로 확인 가능
      • > 내가 밟은 게 적 오브젝트(공룡)인가?
    • 적 오브젝트에 붙어있는 Component 가져오기
      • EnemySaurus enemy = collision.gameObject.GetComponent<EnemySaurus>(); 
        • > collision이 붙어 있는 GameObject의 EnemySaurus 컴포넌트 가져오기
    • 적의 움직임 멈추기
      • isDead 변수를 이용해 Update 함수를 return하게 함
        • Update함수를 끝내게 함!
  • public과 private
    • public : 외부에서 할당 가능(유니티 내부에서 보임, 외부 참조 가능)
    • private : 외부에서 확인할 수 없음
    • 기본 : private
  • 게임의 필수 요소
    • 목표(코인 먹기, 적을 해치우기 등)
    • 메인 목표, 서브 목표, 루프
    • > 공격 외의 '룰'이 있어야 함
      • GameManager!
  • GameManager
    • '룰'
    • 게임 오버 됐을 때 다시 시작하기 등...
      • 게임 오버
        • SceneManager.LoadScene(0); // 첫 번째 씬을 부르기
        • Invoke("GameOver_", 2);      // GameOver_를 2초 뒤에 호출
    • 싱글톤 기법
      • 게임 또는 씬 내에 오직 하나만 존재하는 클래스
      • '매니저' 관련 클래스에 많이 사용됨
      • Input Manager, Game Manager, SoundManager 등...
      • 아래는 싱글톤 만드는 방법 중 하나
      • 너무 많이 사용하면 코드 복잡해짐, 문제 발생 시 추적도 힘듦
using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

// 싱글톤 
public class GameManager : MonoBehaviour 
{ 
	// static : 게임 전체에 단 하나만 존재, ㅣ = 인스턴스 
    public static GameManager I;	
    
    // Start와 동일한데 한 단계 앞서서 호출 
    // Awake -> Start -> Update -> Update... 
    private void Awake()
    {
    	I = this;	// 자기 자신을 넣어주기     
    }
}
  • BGM 추가(무한 재생)
    • GameManager에 AudioSource 추가
      • AudioSource : 사운드 재생하는 스피커
    • Play On Awake 체크 : 플레이와 동시에 재생
    • Loop 체크 : 무한재생
  • 효과음 추가(특정 상황에만 재생 = 스크립트 사용)
    • 게임 플레이어 오브젝트에 AudioSource 추가
      • 플레이어가 적을 밟을 때 소리를 재생하기 위해 
public AudioSource audioSource;
public AudioClip clip; 


// 유니티 기본 제공 함수, 트리거 설정한 박스 콜라이더에 다른 박스 콜라이더가 감지됐을 때(충돌 발생) 호출 
private void OnTriggerEnter2D(Collider2D collision) 
{ 
	// 적 태그면 공격 성공 
    if (collision.gameObject.tag == "enemy") 
    	{ 
        	// 소리 재생 
            audioSource.clip = clip;
            audioSource.Play();
        } 
}

 

 

느낀 점

...내가 게임을 잘 못 해서 그런가 공격이 잘 들어갔는자 확인해야되는데 

적을 밟는 게 되게 힘들었음ㅋㅋㅋ 쩝

근데 노래도 넣고 코인도 넣으니까 더 게임같아져서 그런가 더 재밌었다!!

이제 코드로 동작 만드는 게 익숙해졌음

 

반응형
Comments