Unity 공부 11

[Unity] 재사용 스크롤 뷰 - 수정(Recyclable Scroll View)

유니티에서 스크롤 뷰를 사용할 때, 많은 양의 데이터를 표시하는 것은 성능에 큰 부담을 줄 수 있습니다. 예를 들어 수백 개, 수천 개의 아이템을 스크롤 뷰에 추가하면, 메모리 사용량과 성능 문제가 발생할 수 있습니다. 이때 사용하는 최적화 기법이 바로 재사용 스크롤 뷰(Recyclable Scroll View)입니다.   1. 재사용 스크롤 뷰의 개념재사용 스크롤 뷰는 화면에 보이는 아이템만 UI요소로 생성하고, 보이지 않는 슬롯은 재사용하는 방식으로 동작합니다. 기본적인 스크롤 뷰는 모든 아이템을 한꺼번에 생성하는 방식이라, 아이템이 많을수록 메모리 사용량과 CPU 부하가 증가하게 됩니다.반면, 재사용 스크롤 뷰는 보이는 아이템만 생성하고, 사용자가 스크롤하면 이미 생성된 슬롯을 재배치하여 화면에 맞..

Unity 공부 2024.10.08

[Unity] 속성(Attribute)

Unity에서 Attribute(속성)는 클래스, 메서드, 변수 등의 요소에 메타데이터를 추가하여, 특정 기능을 부여하거나 Unity 에디터에서의 동작을 제어하는 데 사용됩니다. 이 글에서는 Unity에서 자주 사용되는 Attribute에 대해 설명하며, 각각의 사용 방법과 예제를 통해 알아보겠습니다.   1. Attribute(속성)란?Attribute는 클래스, 메서드, 필드 또는 프로퍼티에 추가되는 메타데이터입니다. 이 메타데이터는 런타임 또는 컴파일 타임에 특정 기능을 적용하거나, Unity 에디터에서의 동작을 변경하는 역할을 합니다. 예를 들어, Unity에서 SerializeField, Range, Tooltip과 같은 Attribute는 에디터에서 변수를 시각화하고 편집하는 방식을 제어합니다..

Unity 공부 2024.08.24

[Unity] 코루틴(Coroutine)

1. Unity 코루틴(Coroutine)이란?유니티(Unity)에서 코루틴(Coroution)은 프레임 간에 멈추고 재개할 수 있는 특별한 형태의 메서드입니다. 코루틴은 특정 시간 동안 대기하거나 비동기 작업을 수행할 때 유용하게 사용할 수 있습니다. 유니티에서는 코루틴을 사용하여 비동기적인 작업을 처리할 수 있으며, 이는 게임 개발에서 자주 사용됩니다.   주요 특징1. 메인 스레드에서 실행Unity의 코루틴은 메인 스레드에서 실행됩니다. 이는 코루틴이 Unity API와 상호작용할 수 있게 해주며, 비동기 작업을 쉽게 처리할 수 있게 합니다. 따라서, 코루틴 내에서 Unity 오브젝트에 안전하게 접근할 수 있습니다. 2. 비동기 작업코루틴은 비동기적으로 작업을 처리할 수 있게 해주며, 긴 작업을 여..

Unity 공부 2024.08.04

[Unity] 재사용 스크롤 뷰(Recyclable Scroll View)

수정된 설명과  코드, 이미지를 추가하여 새롭게 글을 작성했습니다.재사용 스크롤 뷰의 경우 이곳에서 확인해주세요. https://unity-programming-study.tistory.com/51   재사용 스크롤 뷰(Recyclable Scroll View)란?유니티에서 재사용 스크롤 뷰(Recyclable Scroll View)는 많은 수의 아이템을 포함하는 스크롤 리스트를 효율적으로 관리하기 위한 기법입니다. 이 기술은 메모리 사용량을 줄이고 성능을 향상시키기 위해 사용됩니다. 1. 재사용 스크롤 뷰의 개념일반적인 스크롤 뷰에선 리스트에 있는 모든 아이템을 UI 요소로 생성합니다. 만약 수백 개 이상의 아이템이 있는 경우, 모든 아이템을 한 번에 생성하면 많은 메모리와 CPU자원을 소모하며 버벅임..

Unity 공부 2024.06.18

[Unity] 카메라 이동(드래그)

안녕하세요. 이번 시간엔 마우스 및 화면 터치 & 드래그로 카메라, 오브젝트를 이동하게 하는 방법에 대해 작성하고자 합니다. 먼저 카메라 및 오브젝트들을 임의의 위치로 생성합니다. 다음 CameraController.cs 를 생성합니다. CameraController.cs using UnityEngine; public class CameraController : MonoBehaviour { [SerializeField] private GameObject _camera; [Tooltip("드래그 하여 이동할 거리 비율")] [SerializeField] private float _moveRate; private Vector3 _tmpClickPos; private Vector3 _tempCameraPos;..

Unity 공부 2024.02.04

[Unity] 컷 아웃 마스크(Cutout Mask)

Unity에서 특정한 이미지 모양만 보이도록 하기 위해 찾다가 발견한 영상입니다. 원본 링크: https://youtu.be/XJJl19N2KFM 코드 CutoutMaskUI.cs using UnityEngine; using UnityEngine.UI; using UnityEngine.Rendering; public class UICutoutMask : Image { public override Material materialForRendering { get { Material material = new Material(base.materialForRendering); material.SetInt("_StencilComp", (int)CompareFunction.NotEqual); return mater..

Unity 공부 2024.01.24

[Unity] Behavior Tree(BT)

간단한 AI는 FSM를 통해서 만들어왔습니다만 상태가 많아지고 조건이 추가될 수록 보기가 힘들었습니다. FSM의 경우엔 상태가 많지 않은 경우 유용하여 주로 사용했으나 팀 프로젝트에서 보스AI를 담당하면서 많은 상태를 가진 AI를 제작해야했습니다. 찾아본결과 AI의 많은 상태를 효율적으로 관리하기위해선 Behavior Tree를 사용하는 것이 좋다 판단, 보스 AI를 만들기 위해 BT를 직접 구현해 봤습니다. Behavior Tree는 게임 내 캐릭터와 몬스터, 보스에 대한 인공 지능(AI) 및 의사 결정 시스템을 만드는 데 널리 사용되는 디자인 패턴입니다. 행동 트리는 에이전트의 의사 결정 논리를 모델링하고 구성하는 시각적인 방법을 제공하므로 구조화된 모듈식 방식으로 복잡한 행동을 더 쉽게 설계할 수 ..

Unity 공부 2023.12.11

[Unity] FSM 유한 상태 기계

FSM: 유한 상태 기계(Finite-State Machine) 유한 상태 기계는 주어지는 모든 시간에서 처해 있을 수 있는 유한개의 상태를 가지고 주어진 입력에 따라 어떤 상태에서 다른 상태로 전환하거나 출력이나 액션이 일어나게 하는 장치 또는 장치를 나타낸 모델 상태(State): 게임에 정의된 여러 동작을 낸다 Idle, Walk, Run... 한 상태에서 다른 상태로 전이할 수 있고 동시에 여러 상태를 실행할 수 없다. 전이(Transition): 한 상태에서 다른 상태로 변화 하는것 각 상태 로직 또는 외부에서 전이 조건에 의해 전이될 수 있다. FSM을 간단하게 사용해 플레이어를 움직일 수 있게 하는 코드를 작성했습니다. 구현 코드 BaseState 모든 상태의 부모 클래스 public abs..

Unity 공부 2023.11.21

[Unity] 가중치 랜덤 뽑기

안녕하세요 이번에는 Unity에서 가중치 랜덤 뽑기 시스템을 만들어보고자 합니다. 먼저 간단한 가중치 랜덤 뽑기 시스템 클래스를 작성해봤습니다. 각 코드에 대한 설명은 주석을 달아놨습니다. using System.Collections.Generic; using UnityEngine; /// /// 가중치 랜덤 뽑기 시스템 클래스 /// public class WeightedRandom { public WeightedRandom() { _dic = new Dictionary(); } private Dictionary _dic; /// /// 가중치 리스트에 아이템과 수량을 추가함 /// public void Add(T item, int value) { //음수가 들어오면 리턴한다. if (value < 0..

Unity 공부 2023.11.05

[Unity] PC에 저장된 이미지 파일 불러오기

이전 게시글에서 부분캡쳐한 이미지를 PC에 저장했었는데요. 이번에는 저장한 이미지를 불러와 게임에 적용시켜보겠습니다. /// /// PhotoData 클래스의 정보로 PC에 저장된 PNG파일을 Image오브젝트의 이미지를 변환하는 함수 /// private void SetImageByPhotoData(PhotoData photoData) { if (photoData != null) { //파일이 저장된 위치와 파일이름을 붙여 저장 string path = photoData.PathFloder + photoData.FileName; //저장 위치에 있는 PNG파일을 읽어 Byte배열로 변환후 저장 byte[] bytes = File.ReadAllBytes(path); Texture2D tex = new T..

Unity 공부 2023.11.02