유니티 13

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

유니티를 사용할 때 스프라이트와 다른 그래픽스를 사용해 눈에 보이는 것들을 제작한다. 하나의 프로젝트에 텍스처 파일이 많을 수 밖에 없다. 유니티에서는 씬에 배치된 각 텍스처에 대해 드로우 콜을 발행한다. 이 때, 텍스처가 많이 포함된 경우 여러 개의 드로우 콜이 존재하게 되어 리소를 많이 잡아먹어 성능이 저하된다. 이 때 사용되는 것이 스프라이트 아틀라스(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#] 마우스 위치로 바라보기

탑다운 게임에서 마우스로 조작을 할 때 마우스 커서 위치를 바라보는 경우가 있다. 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#] 라인렌더러를 이용한 움직이는 발판

유니티 내장 기능을 이용하여 플레이어가 올라타면 위아래로 흔들리며 움직이는 발판을 구현한다. 사용한 컴포넌트 1. LineRenderer 2. SpringJoint 발판이 될 오브젝트에 LineRenderer와 SpringJoint를 부착한다. LineRenderer에는 벽에 걸려있는 것처럼 보이는 역할을 하는 오브젝트를 부착한다. SpringJoint는 적절하게 조정한다. 전체 코드 public class Draw_MoveLine : MonoBehaviour { [Header("라인을 그리는 스크립트")] [SerializeField] private Draw_CollisionLine m_drawLine; [Header("라인의 움직일 축이되는 오브젝트")] [SerializeField] private ..

[유니티/C#] UI 슬라이드 기능 만들기 (DOTween)

유니티 내장기능인 DOTween을 사용하여 탭키를 누르면 옆에서 스르륵 등장하는 UI를 간단하게 구현했다. void Update() { if (Input.GetKeyDown(KeyCode.Tab) && isCanTab) { QuestOn(0.3f); } if (Input.GetKeyUp(KeyCode.Tab) && isCanTab) { QuestOff(0.3f); } } public void QuestOn(float duration) { questUI.GetComponent().DOAnchorPosX(0f, duration); } public void QuestOff(float duration) { questUI.GetComponent().DOAnchorPosX(-500f, duration); }

[유니티/C#] 터치로 화면이동

참고한 블로그 https://blog.naver.com/dlehdgh1120/221706425033 public class CameraController : MonoBehaviour { //* 터치, 마우스 카메라 컨트롤러 *// Vector2 clickPoint; Vector3 touchStart; void Awake() { // 카메라 배율 초기화 Camera.main.orthographicSize = 10; } void Update() { if (Input.GetMouseButtonDown(0)) { // 마우스가 눌렸을 때 마우스 좌표 저장 // clickPoint = Input.mousePosition; touchStart = Camera.main.ScreenToWorldPoint(Input.m..