전체 글 32

[유니티] 스프라이트 아틀라스

유니티를 사용할 때 스프라이트와 다른 그래픽스를 사용해 눈에 보이는 것들을 제작한다. 하나의 프로젝트에 텍스처 파일이 많을 수 밖에 없다. 유니티에서는 씬에 배치된 각 텍스처에 대해 드로우 콜을 발행한다. 이 때, 텍스처가 많이 포함된 경우 여러 개의 드로우 콜이 존재하게 되어 리소를 많이 잡아먹어 성능이 저하된다. 이 때 사용되는 것이 스프라이트 아틀라스(Sprite Atlas) 이다. 스프라이트 아틀라스는 여러 개의 텍스처를 단일 텍스처로 결합하는 에셋이다. 유니티에서는 단일 텍스처를 호출함으로써 여러 개의 드로우 콜을 발행하는 대신에 하나의 드로우 콜을 발행할 수 있다. 출처 : 유니티 API https://docs.unity3d.com/kr/2021.3/Manual/class-SpriteAtlas..

유니티 2023.08.13

[유니티/C#] 모바일 환경 멀티터치 구현

기존에 만들었던 PC 게임을 모바일로 컨버팅 했다. 조이스틱을 조작하는 동시에 화면을 드래그해서 카메라를 회전시키는 방법을 기록해두려고 한다. 구현하기 쉬울줄 알았는데 생각대로 안되어서 시간을 좀 잡아먹었다. void CamRotate() { // 들어온 터치입력 수만큼 반복 for (int i = 0; i < Input.touchCount; i++) { // 들어온 터치 입력 순서대로 순회 Touch t = Input.GetTouch(i); // UI를 터치하고 드래그 했을 때에는 회전하지 않도록 하기 위한 bool값 bool isTouchingUI = EventSystem.current.IsPointerOverGameObject(t.fingerId); // 터치 입력의 상태에 따른 동작 switch ..

[유니티/c#] json으로 데이터 관리하기

원래는 엑셀의 csv 파일로 데이터를 관리했지만, 이번에 Rookies님의 강의를 들으면서 json을 이용한 데이터 관리를 새롭게 배우게 되었다 메모장을 json확장자로 만들고 프로젝트 파일에 넣으면 사용이 가능하다. 파일은 다음과같이 사용되는데, [ ] : List { } : Struct 처럼 생각하면 편하다. 간단히 말해서 stats라는 리스트 안의 인덱스에 속성이 정의되어 있는 구조체가 들어간다는 것이다 다음은 데이터를 관리하는 클래스를 만든다. 필요한것은 1. json으로 가져온 데이터를 보관할 클래스 2. 데이터를 관리하는 DataManager클래스 우선 1. json으로 가져온 데이터를 보관할 클래스를 작성한다. public interface ILoader { Dictionary MakeDic..

[유니티/C#] Action을 활용한 InputManager

Action을 이용해서 MouseAction 이벤트를 구독하고 사용하는 코드 KeyBoardAction, MouseAction을 구독한 함수들의 로직을 OnUpdate에서 Invoke()로 모두 실행한다 public class InputManager { public Action KeyBoardAction = null; public Action MouseAction = null; bool _pressed = false; public void OnUpdate() { if (EventSystem.current.IsPointerOverGameObject()) return; if(Input.anyKey && KeyBoardAction != null) KeyBoardAction.Invoke(); if(MouseAc..

[C#] 제네릭의 비교 형식 제한

제네릭으로 클래스를 선언했을 때, 비교연산자를 사용할 수 없다는 문제가 있다. IComparable인터페이스를 클래스 선언부에 사용해주면 비교 가능한 자료형만 받아올 수 있다. class Example where T : IComparable { // 클래스 구현 } class UseExample : IComparable { public int ID; public int CompareTo(UseExample other) { if(ID == other.ID) return 0; return ID > other.ID ? 1 : -1; } }

C#/C# 일반 2023.07.17

[유니티/C#] 마우스 위치로 바라보기

탑다운 게임에서 마우스로 조작을 할 때 마우스 커서 위치를 바라보는 경우가 있다. private void Rotate() { // 마우스 커서의 위치를 바라봄 // ScreenPointToRay : 화면상의 점을 카메라 뷰포트 상의 원점으로 하는 레이 발사 Ray _cameraRay = Camera.main.ScreenPointToRay(Input.mousePosition); // Vector3.up과 Vector3.zero (세계 좌표계의 원점)을 인자로 받아 Plane 객체 생성 // => 수평 평면으로 y=0을인 Plane 객체를 생성 // y=0인 평면 == 씬에서 오브젝트들이 배치되어 있는 평면 Plane _plane = new Plane(Vector3.up, Vector3.zero); // 레..

[c++/STL] 상속과 vector를 활용한 랜덤 퀴즈

c++를 공부하기 시작했다. 객체지향 설계를 중점으로 공부하며 진행했다. Media클래스에서 파생된 미디어들의 제목과 내용을 바탕으로 한 간단한 랜덤 퀴즈 프로그램을 만들었다. Base가 되는 MediaInfo 클래스 더보기 MediaInfo #ifndef MEDIAINFO_H #define MEDIAINFO_H #include #include using namespace std; enum EMediaType { AUDIO = 1, MOVIE }; class MediaInfo { protected: string title; public: EMediaType mediaType; MediaInfo(); MediaInfo(string title); virtual string GetTitle(); }; #end..

C++ 2023.07.08