내일배움캠프 Unity 9기/TIL 24

[Unity/TIL] - 인벤토리 만들기

더보기퍼즐게임만드는 중.퍼즐을 풀다보면 단서를 모으게 되는데 이걸 보관할 수 있는 인벤토리를 만들어야 함.화면 하단 좌측에 숫자키 형태의 인벤토리를 만들기로 결정.인벤토리(단서 수집함) 만들기 1. 단서를 획득시 인벤토리에 표시2. 인벤토리는 숫자 키 1-4로 사용가능3. 숫자 키 입력시 단서 상세내용 확인 가능 ClueData를 ScriptableObject로 만듬. Inventory.csusing System.Collections;using System.Collections.Generic;using TMPro;using Unity.VisualScripting;using UnityEngine;public class Inventory : Singleton{ public List collectedC..

[Unity/TIL] - QTE시스템, 프롬프트 만들기

QTE시스템 public RectTransform needle; // 바늘 public float rotateSpeed = 90f; // 초당 회전 속도(도) public KeyCode inputKey = KeyCode.Space; public Image successZone; public float minAngle = 120f; // 추후 매개변수로 변경 public float maxAngle = 150f; // 추후 매개변수로 변경 private float currentAngle = 0f; // 현재 각도. (바늘은 시작시 0도, 최대로 갔을 때 -180도 (반원)) private bool isRunning; public void ..

[Unity/TIL] - 델리게이트/Action/Func/람다

델리게이트는 함수를 변수처럼 저장하고 실행형식접근제한자 delegate 반환형 델리게이트이름(); 핵심특징- 메서드를 저장하고 나중에 실행할 수 있다.- +=, -= 로 여러 개의 함수 연결 가능- ?.Invoke()로 null체크 후 안전 실행 가능예시상황- 버튼 클릭 시 연결된 함수 실행- 이벤트 시스템 구현- 콜백 함수 처리 1. 델리게이트 // 선언 및 초기화public delegate void TestDel1(); public delegate void TestDel2(int num1); public delegate void TestDel3(int num1, int num3); public TestDel1 testDel1; public TestDel2 testDel2; public TestDel..

[Unity/TIL] - 싱글톤

1. 싱글톤. 왜 쓰나요?특정 클래스가 게임 전체에서 단 하나만 존재하도록 보장하고,전역 접근이 가능하도록 만들기 위해. 대표적으로 GameManager, SoundManager, UIController 등에 사용. 2. 기본 싱글톤 패턴using UnityEngine;public class GameManager : MonoBehaviour{ public static GameManager Instance { get; private set; } private void Awake() { // 인스턴스가 이미 존재하면 이 오브젝트는 제거 if (Instance != null && Instance != this) { Destroy(game..

[Unity/TIL] - UI Image 깨지지 않게 만들기

이런 UI창을 만들고 싶었다. 이미지 사이즈는 100*100 이미지 Inspector에서 Texture Type을 Sprite로 바꿔야 UI 이미지로 쓸 수 있다. 1920*1080 화면에이미지를 놓고 늘리니 깨진다. 이미지 크기가 작아서 그런가..? 이번엔 1122*1060 사이즈의 이미지를 가져와서 넣어봤지만그래도 깨진다.모서리 선의 굵기가 균일하지 않고 늘어진다. 깨지지 않고 UI 이미지로 쓰는 법 Image 컴포넌트에서Image Type를 Sliced로 설정. 이미지의 Inspector로 와서 Sprite Editor 를 누른다. 초록 점을 옮겨 이미지를 9등분으로 슬라이스해준다.* 가운데 부분에 올 이미지는 연결했을 때 자연스러워 보이기 위해 되도록 아무런 장식이 없는 것으로 하는 것이..

[Unity/TIL] - GetComponent

더보기3번째 팀프로젝트 진행하면서 가장 많이 본 오류.NullReferenceException: Object reference not set to an instance of an object값이 없다. Null이다. 연결이 안되어 있다. 오류를 해결하다보니 내가 GetComponent를 이상하게 쓰고 있다는 걸 알게됐다. 그래서 쓰는 TIL.===== GetComponent()이 스크립트가 붙어있는 게임오브젝트에서 컴포넌트 T를 찾는다. (없으면 null 반환)Rigidbody2D rb = GetComponent(); GetComponent(문자열)안전성 떨어져서 거의 안 씀. 되도록이면 제네릭 방식 ()을 써야 함Component comp = GetComponent("PlayerController");..

[Unity/TIL] - 맵에 아이템 배치하기

맵에 아이템을 배치해야 하는데 오브젝트를 계속 복제해서 배치하기엔 성능저하가 올 것 같아 다른 방법을 찾아보았다. 오브젝트 풀링자주 생성되고 삭제되는 GameObject를 미리 만들어두고 재사용하는 방식.Instantiate()와 Destroy()를 반복하면 성능 저하가 생기기 때문에,쿠키런처럼 골드, 몬스터, 이펙트 등이 자주 등장하는 게임에선 풀링이 필수다. 오브젝트 풀링이란? 오브젝트를 담아두는 오브젝트 풀을 생성한다.필요할 때 오브젝트 풀에 있는 오브젝트를 빌린다.오브젝트 풀은 모든 오브젝트를 다 빌려줘서 더이상 빌려줄게 없을 때에만새로운 오브젝트를 생성해서 꺼내준다. 다 쓰면 다시 오브젝트 풀에 반환한다. (오브젝트를 파괴하지 않음) 출처 : 베르의 게임개발 유튜브 📌 풀링을 사용하지 않을..

[Unity/TIL] - Vector3.Lerp / Layer충돌관리 / 맵 끼임 버그 / Composite Collider

함수 안에서 선언된 변수는 함수 안에서만 쓸 수 있다.만약다른 함수에서도 사용하고 싶다면함수 바깥에서클래스의 멤버변수로 선언해야한다. Vector3.LerpVector3.Lerp는 두 벡터(Vector3) 사이를 부드럽게 이동하는 함수.캐릭터나 카메라 이동, 스케일 변경 등 부드러운 전환(보간)에 자주 사용.Vector3.Lerp(Vector3 시작위치, Vector3 목표위치, float 보간값); 땅에 닿으면 점프횟수 초기화Player 아래에 빈 오브젝트 GroundCheck를 만든다.GroundCheck가 Ground 레이어가 붙어있는 오브젝트에 닿으면 점프횟수가 초기화된다.public Transform groundCheck;public float groundCheckRadius = 0.2f;p..

[Unity/TIL] - Header / GetChild / enum / Effects-ParticleSystem

Header인스펙터(Inspector) 창에서 변수 그룹 위에 제목을 표시해주는 애트리뷰트(Attribute) transform.GetChild(index)트랜스폼(Transform) 안에 있는 자식 오브젝트 중에서,특정 인덱스에 해당하는 자식을 가져오는 함수.Transform child = transform.GetChild(0); 현재 오브젝트의 첫 번째 자식 오브젝트를 가져온다.반환되는 타입은 Transform.Player (부모)├── Weapon (자식 0)├── Hat (자식 1) 이런 구조일 때Transform firstchild = transform.GetChild(0);Debug.Log(firstChild.name);=> "Weapon" GetChild(1)은 => ..