TIL

25.02.14 TIL

gaon99 2025. 2. 14. 21:16

부트캠프 17일차

1. 오늘 학습 키워드

Unity 입문 및 새로운 미니게임


2. 오늘 학습 한 내용을 나만의 언어로 정리하기

 

오늘은 새로운 미니게임? Flappy Plane을 제작을 강의와 함께 하며, 게임을 제작했다.

 

우선 지금 만든 미니게임을 사용해서, 추후에 메타버스 제작을 하는 것이 이번 프로젝트의 주제이다.

 

이번에는 기필코 객체 지향을 많이 신경을 써서, 디테일을 살리고 싶다.

 

계속 미루는 기분이라, 초반이 아니면 성장하기 힘들것같다.

 

우선 오늘은 작업을 하며, 일어났던 오류를 이야기하며, 회고를 해보려고 한다.

 

우선 아래의 구문을 작성하면서 임의로 빈 공간을 만들어두었더니, 많은 if문 속에서 else가 잘못된 곳으로 매치되어있었다.

해당 코드를 보면, IsDead가 true 일 경우와 아닐 경우로 나뉘어야 하는데, else if 구문이 두번째 if문인 deathCooldown<=0 과

연결이 되어있어서, 스페이스바와 마우스 클릭을 눌려도 적용되지 않았다..

 if (IsDead)
{
    if (deathCooldown <= 0)
    {
        if (Input.GetKeyDown(KeyCode.Space) || Input.GetMouseButton(0))
        {

        }
        else
        {
            deathCooldown -= Time.deltaTime;
        }
    }
}
else if ((Input.GetKeyDown(KeyCode.Space) || Input.GetMouseButton(0)))
{
    IsFlap = true;
}

 

두 번째 오류는 오브젝트의 움직임을 따라 카메라를 이동시키는 FollowCamera.cs를 제작했다.

 

이 클래스를 통해, 카메라의 초기위치를 오프셋으로 저장하고, 오브젝트의 움직임에 더해줘서, 카메라가 움직이게 설정해주었다.

하지만 내가 Player 스크립트와 컴포넌트를 Player가 아닌 하위 오브젝트인 Flap에 넣어주었고, 당연히 작동 안했다..

 

이를 깨닫은건, 설마 Player가 아니라.. Flap을 넣어볼까,,? 했는데 작동이 되는걸 보고 눈치챘다.

 

물리엔진, 스크립트, 충돌 등 모든 컴포넌트가 들어있기에 당연히 움직이는 물체는 Flap이다.

그러니, Target에 Player 오브젝트를 넣어도 의미가 없었던 것이였다.. 

깨닫고 난 이후 Flap에 있는 것들을 Player로 옮겨주어 해결했다.

 

마지막은 충돌 컴포넌트의 세팅 문제? 라고 명명하면 될 것같다.

 

해당 프로젝트가 점프를 진행하며 앞으로 진행하는 게임이다. 앞으로 진행을 하기에 맵들과 장애물들이 계속 생성이 되어야하는

구조이다.

 

그렇기에 Bg Looper, 해당 오브젝트와 접촉시에, 태그를 비교하여 지워주고 앞에 생성하는 그런 코드를 작성하여 진행이 이어나도록 유도했다.

public class BgLooper : MonoBehaviour
{
    public int ObstacleCount = 0;
    public Vector3 ObstacleLastPosition = Vector3.zero;
    public int NumBgCount = 5; // Unity에서 작업시에, 한 섹션당 5개의 Object를 가지고 있음

    void Start()
    {
        Obstacle[] obstacles = GameObject.FindObjectsOfType<Obstacle>();
        ObstacleLastPosition = obstacles[0].transform.position;
        ObstacleCount = obstacles.Length;


        for (int i = 0; i < ObstacleCount; i++)
        {
            ObstacleLastPosition = obstacles[i].SetRandomPlace(ObstacleLastPosition, ObstacleCount);
        }
    }

 

하지만 이게 Player도 충돌 효과가 있어야하기에 컴포넌트가 들어있고, 배경도 결국 Looper와 충돌 해야하기에

Collider가 필요하다.

 

두 Collider가 접촉시에 충돌 효과가 일어나기에, 그냥 배경을 뚫고 위로 충돌하는 현상이 일어났다.

 

이는 IsTrigger를 키지 않아서, 일어난 현상인데, IsTrigger를 켜주니 작동을 제대로 하였다.

+) 스크립트로 Enter, Exit을 설정하여 액션값을 줄수있다.

 

그리고나서, 배경에 해당하는 모든 오브젝트들의 충돌 즉 Collider의 IsTrigger를 켜주었다.

 

그 결과는.. 참혹했는데, 비행기가 이젠 게임 기준으로 하늘과 땅을 다 뚫고 다니는 것이다..

 

이 오류는 예전에 사전캠프에서 해결해본적이 있어서, 다행히 금방 감을 잡았다.

 

땅은, 이미지를 따왔기에, Polligon Collider를 사용했는데,  이도 IsTrigger가 켜져있어 생긴 문제였다.

 

그래서,, Polligon Collider는 꺼주었고, Box Collider를 새로 넣어, IsTrigger를 켜주었다.

 

이렇게 작업을 하니, 벽도 안 뚫고, 맵도 연장이 되어 게임을 완성하게 되었다.

 

그 이후 UI작업을 하여, 첫번째 미니게임 완성이 끝이났다.

 

프로젝트는 메타버스를 만드는 것이기에, 에셋,, 의 힘을 빌려.. 어떻게 구상할지, 러프하게 머리속에서 생각을 해둔 상태이다.


3. 학습하며 겪었던 문제점 & 에러

2.에서 설명하였기에 넘기겠다.


4. 내일 학습 할 것은 무엇인지

주말,, 금일 잠이 너무 부족해서 집중력이 중간에 몇번 깨졌다.

주말에 체력을 회복해서.. 다음주도 상쾌하게 시작해야겠다

'TIL' 카테고리의 다른 글

25.02.18 TIL  (0) 2025.02.18
25.02.17 TIL  (0) 2025.02.17
25.02.13 TIL  (0) 2025.02.14
25.02.12 TIL  (0) 2025.02.14
25.02.11 TIL  (0) 2025.02.11