
'게임 개발이 처음이어도 쉽게 배우는 모바일 게임 개발' 2주차와 3주차에서는 각각 '풍선을 지켜라'와 '고양이 밥주기' 게임을 만드는 학습을 하였다.
2, 3주차 강의에서는 1주차 강의와 비교했을 때, 좀 더 심화적인 내용을 다루고 있었다. 예를 들면 '풍선을 지켜라' 게임에서는 오브젝트를 마우스와 함께 움직일 수 있는 법을 배우거나, PlayerPrefs를 이용한 최고점수를 기록하는 법을 배울 수 있었다.
'고양이 밥주기' 게임에서는 하나의 prefabs이 아닌 여러 prefabs를-본 강의에서는 최대 3가지-Instantiate 하는 법이나, rigidbody에서 Dynamic이 아닌 Kinestic일 때 충돌 판정을 기능하게 하는 법 등을 배울 수 있었다.
오늘의 TIL에서는 어제 배웠던 내용 외에 새로 배운 내용을 정리할 예정이다.
1.
1주차 강의에서는 싱글톤을
public static GameManager Instance;
void Awake()
{
Instance = this;
}
이란 형태로 구현했었지만 2주차 강의에서부터는
public static GameManager Instance;
void Awake()
{
if(Instance == null)
{
Instance = this;
}
}
같은 형태로 구현하였다.
Instance에 게임매니저를 적용하기 전에 '인스턴스에 아무 것도 없을 때'라는 조건이 추가되었다.
2.
Animator에서는 하나의 오브젝트에 둘 이상의 Animation을 동작할 수 있게 할 수 있다.
Animation간 transition을 연결하여 Parameter의 bool 값에 따라 Animation의 변화를 구현할 수 있다.
bool 값을 변경하는 방법은 프리팹이나 텍스트를 public으로 받을 수 있듯이 Animator도
'public Animator anim;' 같은 식으로 받을 수 있다.
'anim.SetBool("isTrue", true); ' 식으로 Animator의 parameter를 조작할 수 있다.
3.
Invoke("함수 이름", float)함수를 이용하면 해당 함수를 float시간동안 지연시켜 기능하게 할 수 있다.
4.
PlayerPrefs는 유니티에 변수를 저장할 수 있다. 이를 통해 숫자값이나 문자열을 저장할 수 있다.
저장하기 위해서는
PlayerPrefs.SetFloat("highScore", 실수);
PlayerPrefs.SetString("playerName", 문자열);
같은 식으로 이용하면 되며,
불러올 때는
PlayerPrefs.GetFloat("highScore", 실수);
PlayerPrefs.GetString("playerName", 문자열);
큰 따옴표 안에 있는 문자열로 해당 숫자값이나 문자열을 저장할 수 있다.
또한 'playerPrefs.HasKey("highScore")' 으로 해당 이름으로 저장된 데이터의 존재 여부를 bool값으로 반환 가능하며,
PlayerPrefs.DeleteAll(); 을 이용해 저장된 값을 모두 삭제할 수도 있다.
5.
Rigidbody 컴포넌트를 추가하면 처음에는 dynamic body type이 적용되어 있다. 이 경우 OnCollisionEnter를 이용해 충돌판정을 이용한 기능을 구현할 수 있지만,
만약 특정 움직임을 위해 body type에 kinematic을 적용할 경우 OnCollisionEnter을 이용할 수 없다.
이때는 OnTriggerEnter를 이용하면 kinematic에도 충돌판정을 구현할 수 있다.
단, Collider 컴포넌트에서 Is Trigger를 활성화 해야 한다.
OnTriggerEnter의 예시
---
private void OnTriggerEnter2D(Collider2D collision)
{
if(collision.gameObject.CompareTag("Food"))
{
// (생략)
}
}
---
6.
오브젝트를 마우스를 통해 움직이고 싶다면,
Camera.main.ScreenToWorldPoint(Input.mousePosition)를 이용해 게임 내의 마우스 포인트 위치를 가져온 다음,
transform.position에 그 벡터값을 입력하는 방법이 있다.
단, 위의 기능만 적용할 경우, 게임 밖으로 마우스가 나가면, 오브젝트도 같이 게임 밖을 나가게 된다.
만약 오브젝트가 게임 밖으로 나가지 않기를 바란다면,
---
Vector2 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
float x = mousePos.x;
float y = mousePos.y;
if (x > 3f)
{
x = 3f;
}
if (x < -3f)
{
x = -3f;
}
if(y > 5f)
{
y = 5f;
}
if(y < -5f)
{
y = -5f;
}
transform.position = new Vector2(x,y);
---
같은 식으로 오브젝트가 움직일 수 있는 x값과 y값을 정하는 방법을 사용할 수 있다.
7.
간혹 GameObject를 가져오는 기능을 이용할 때,
"Object reference not set to an instance of an object"
같은 오류가 발생하는 경우가 있다.
이 경우는 public GameObject objectName; 같은 식으로 오브젝트나, 텍스트를 가져와야할 때,
불러오지 않고 Null값인 경우에 위의 오류가 발생할 수 있다.
---
2주차와 3주차 강의는 확실히 1주차 강의에 비하면 더 어려운 내용이 많았다.
강의에 대해 복습을 할 때, 1주차 강의는 강의 자료를 보지 않고도 어느정도 원하는 기능을 스스로 구현이 가능 했지만,
2, 3주차 강의에서는 원하는 기능을 구현하기 위해서는 강의 자료의 참고가 좀 더 필요하였다.
4주차 강의로 넘어가기 전에 2,3주차 강의의 복습을 더 철저히 해야할 것 같다 느꼈다.
'내일배움캠프 TIL' 카테고리의 다른 글
| 내일배움캠프 6일차 TIL "C#의 자료형, 변수, 연산자" (0) | 2024.09.19 |
|---|---|
| 내일배움캠프 5일차 TIL "게임을 빌드하는 법" (0) | 2024.09.13 |
| 내일배움캠프 4일차 TIL "게임 추가요소" (0) | 2024.09.12 |
| 내일배움캠프 3일차 TIL "반복문, 배열" (0) | 2024.09.11 |
| 내일배움캠프 1일차 TIL "유니티 사용 기본" (0) | 2024.09.09 |