카테고리 없음

유니티 내일배움캠프 19일차 TIL : TopDown2D과제

부엥 2024. 10. 10. 21:15


과제 진행 중

 

 

Aseprite로 대강 설정창 배경이랑 버튼만 만들었다.

저..픽셀의 사이즈? 맞추는 건 어떻게 해야 보기에 불편하지 않을지

과제 진행이 더 되어 시간이 생기거나 아님 제출 마감 이후에 찾아봐야겠다.

일단은 얘가 중요한 건 아니니까 구냥 하기~

 


Panel

처음에는 그냥 UI에서 이미지나 캔버스 추가해서 만들다보니, Panel이라는게 있었다.

배웠던건가? 아닌가..? 나는 늘 까먹어...그냥 일단 눌러보았다.

그리고 좋아보여서 Canvas를 나눠놓은 것을 Panel로 다시 만들었다.

그랬더니 Panel의 내용물들( Text와 Buttone등)이 게임화면에 보이지 않았다.

찾아보니 꼭 Canvas아래에 있어야 렌더링이 된단다.

에.

 

그니까 Canvas는 UI가 렌더링되기위해서 꼭 있어야하는 부모중의 부모?고

Canvas아래에 버튼, 텍스트, 이미지를 넣어 캔버스를 여러개 만들거나,

한 Canvas안에 여러 Panel(패널 안에 또 버튼, 텍스트 등등)을 만들어서 구분하는 방법이 (내가 아는건)있다.

 

그냥 Canvas를 여러개 만들어도 되는 거 아닌가? 하는 생각이 들었지만,

그래도 Canvas하나 안에 Panel 여러개를 넣는게 깔끔해 보이기는 한다. ...까지 생각했는데

그래도 둘의 차이가 어떤지, 어떤 상황에서 무엇을 써야 적합한지가 궁금해졌다.

 

 

구글에서 원하는 답변을 못 찾아서 결국 튜터님 찬스를 썼다.

Q. UI에서 Canvas아래에 여러개의 Panel을 사용하는 것과, Canvas를 여러개 사용하는 것은 어떤 차이점이 있나요??


A. Canvas를 여러개 사용하면 레이어 순서를 하나하나 지정해 주어야 합니다.
Panel을 사용하면 Hierarchy 창에서 Canvas안의 Panel 순서를 변경해 주기만 해도 됩니다.
그리고 렌더링 할 때 각각 하느냐의 차이(..?)가 있습니다.
취향과 상황에 따라 사용하면 됩니다.

+ 렌더링 부분은 캔버스 단위로 이루어지기 때문에 한 캔버스에 많은 UI 요소들이 있는 것 보단 어느정도 기준을 둬서 캔버스를 나누는게 더 좋을 수도 있다라고 이해하시면 될거 같습니다.

 


버튼 만들기

버튼 연결 어떻게 하는지 바로 다 까먹어서^^ 찾아보다가 아래의 글을 찾았다.

 

AddListener로,

설정 버튼을 누르면, 설정 패널이 뜨고, 설정 패널에서 완료 버튼을 누르면 다시 스타트씬패널이 뜨도록 만들었다.

얼레벌레 한 것 같은데 뭔가 연결이 되어서 뿌듯!

https://geukggom.tistory.com/178

 

[Unity] Button onClick 이벤트 연결 방법(feat. AddListener())

유니티에서 버튼에 함수를 연결할 때 아래와 같이 인스펙터 창에서 On Click () 창에 스크립트를 직접 연결하는 방법을 주로 사용하는데요, 이 방법은 함수 이름이 바뀌거나 하면 연결이 풀려 계속

geukggom.tistory.com

 

더보기

이거 하나 하는데도 고난과 역경이 있었다.

그치만 직접 해보면서 하나씩 이게 그거였구나~ 하는중...

이렇게 하고 스크립트를 Canvas에 추가해주고, 패널과 버튼을 넣어주었다.

 

일단 UI부터 만들어 놓고 찾아보며 기능을 만들고있다.

버튼들이 하나씩 자기 할 일을 찾아가니 기쁘다^^..홍홍

 


카메라 이동

카메라가 타겟(캐릭터)을 따라가도록 만드는 과제에서

이왕이면 부드럽게 따라갔으면 좋겠어서 찾아본 것들이다.

둘 다 해봤는데

 public class CameraFollow : MonoBehaviour
    {
        // 카메라 target의 Transform을 연결하기 위해
        public Transform target;
        // 카메라가 따라오는 속도 조절용, 숫자가 클수록 빠름!
        public float lerpSpeed = 1.0f;

        // 카메라의 위치와 타겟(캐릭터)위치의 차이, 딱! 붙어서 가는 것을 방지한다 함
        private Vector3 offset;
        // 카메라가 위치할 곳
        private Vector3 targetPos;
        
        private void Start()
        {
            if (target == null) return; // 대상이 없을 때 오류 방지
            // 카메라의 위치 - 타겟(캐릭터)의 위치
            offset = transform.position - target.position; 
        }

        private void Update()
        {
            if (target == null) return;
			
            // 타겟의 위치에 offset(타겟과 카메라의 위치 차이)을 더함
            // 카메라가 일정한 간격을 유지하며 따라가게 됨
            targetPos = target.position + offset; 
            
            //  Lerp: 선형보간, Vector3.Lerp: 중간 위치를 계산하는 함수
            //  한 속도를 위해 Time.deltaTime을 곱해줌
            transform.position = Vector3.Lerp(transform.position, targetPos, lerpSpeed * Time.deltaTime);
        }

    }
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace Cainos.PixelArtTopDown_Basic
{
    public class CameraFollow : MonoBehaviour
    {
        // 카메라와 타겟과의 차이 -10만큼 뒤에 위치하도록 고정
        private Vector3 offset = new Vector3(0f, 0f, -10f);
        
        //  카메라가 목표 위치에 도달하는 데 걸리는 시간(부드러운 움직임을 위해서)
        //  값이 작을수록 빠르고 클수록 느림.
        private float smoothTime = 0.25f;
        private Vector3 velocity = Vector3.zero;

        [SerializeField] private Transform target;

        private void Update()
        {
            //  거리유지를 위해 타겟의 위치에 고정된 offset값을 더함
            Vector3 targetPosition = target.position + offset;
            
            //  SmoothDamp가 부드러운 감속운동을 하게 함
            //  ref velocity: 참조로 넘겨진 velocity 값으로 카메라 속도 관리
            transform.position = Vector3.SmoothDamp(transform.position, targetPosition, ref velocity, smoothTime);
        }
    }
}

아래 녀석이 뭔가 더 간단하고 쉬워서 밑의 녀석을 채용했다. ^~^

(왜 글을 발행하면 코드들이 ....끔찍하게 변할까)

 

더보기
https://www.youtube.com/watch?v=ZBj3LBA2vUY

두번째것은 여기서 가져왔다.


씬 전환

Start버튼을 누르면 게임 씬으로 넘어가도록 만들려고

처음엔 UIManager에 같이 만들었는데,

Start버튼의 OnClick에 스크립트를 추가해도 드롭다운 메뉴가 제대로 뜨지 않는 것이다.

그래서 StartButton스크립트를 따로 만들어서도 해봤는데

그냥 이렇게만 뜬다.

 

▽ 강의자료에서는 이렇게 나오는데 말이다.

 

이것도 해줬고...

무엇이 문제일까 9시가 지나서 질문도 못하는 중 엉엉


ㅇ  ㅏ!!!!!!!!!!!!!!

ㅂ ㅏ  보,,,멍,,,ㅊ  ㅓ ,ㅇ,,,

9시가 지났는데 해결 못하면 잠이 안올것같아서

게임중이던 따봉팀장님께 화면 공유로 보여드려서 해결,,,

 

스타트 버튼에 스크립트를 컴포넌트로 추가를 안했던거임 ^^@@ 내 두시간...

ㅋㅋㅎㅎㅋㅋㅋㅎㅎㅎㅋㅋㅋㅎㅎㅎ

 


역시나 이번에도 얼레벌레 굴러가는 나의 과제.. 과연 끝낼 수 있을것인가

23퍼센트 완료됐어@!!!@###@@@!#!@#!!

 

 



과제 얼른 하고 주말에 맛있는거 먹어야 해,,,