겨울팥죽 여름빙수
Unity, Coroutine(코루틴) Lamda(람다식) 사용
게임을 만들자/Unity 2020. 9. 25. 16:05

간혹 어떤 코드가 1프레임 혹은 몇 초 후에 실행됐으면 하는 때가 있다. 예를 들어, Ui를 초기화하고, 한프레임 후 구성요소의 위치나 크기를 가져와야 하는 경우가 그렇다. 초기화하고 바로 값을 읽으면, 원하는 값을 얻을 수 없다. 아마 Unity내부에서 렌더링 되지 않아서 인 것 같다. 이 경우 한프레임 후, 그 값을 읽으면 잘 읽힌다. 이때 한프레임 후 실행되게 할 때, 코루틴을 많이 사용하는데, 이게 은근 사용하기 귀찮게 돼 있다. 좀 더 간편하게 코루틴을 사용하기 위한 클래스들 만들어보자. 1. CoroutineManager 싱클톤 클래스 아래와 같이 싱글톤 클래스를 만들어보자. 2020/01/07 - [게임을 만들자/게임 서버(C#)] - c# 싱글톤 제네릭 클래스 using System; us..

Unity, Spine SetSkin 사용
게임을 만들자/Spine 2020. 9. 20. 14:57

Unity에서 런타임 중 스프인 오브젝트의 스킨을 바꿔야 하는 경우가 있다. SkeletonAnimation.Skeleton에 SetSkin이라는 함수가 있길래, 쉽게 변경이 가능한 줄 알았는데, 잘 변경 되지 않았다. Skeleton.Update()함수도 해봤는데 먹히지 않았다. 뭐가 문제지? 라고 생각하고 검색해 본 결과 SetSkin함수 호출 후, SetSlotsToSetupPose()라는 함수를 호출해야 한다고 한다. public void SetSkin(string skin_name) { m_animation.Skeleton.SetSkin(skin_name); m_animation.Skeleton.SetSlotsToSetupPose(); } 위 코드처럼 해보면 깔끔하게 잘 변경된다.

article thumbnail
Unity, 앱 종료 및 재시작(안드로이드)
게임을 만들자/Unity 2020. 9. 17. 21:11

유저가 뒤로가기 버튼을 두번 연속으로 눌러 앱을 종료시키거나, 업데이트가 후, 재시작이 필요한 경우가 있다. 1. 앱 종료 public static void EndApp() { #if UNITY_EDITOR UnityEditor.EditorApplication.isPlaying = false; #else UnityEngine.Application.Quit(); #endif } 앱 종료는 에디터 상태인 경우와 앱 상태인 경우가 조금 다르다. 방법은 위와 같이, 에디터의 경우엔 UnityEditor클래스를 이용하고, 앱은 UnityEngine.Application클래스를 이용한다. 2. 앱 재시작(안드로이드) if (Application.isEditor) { jdUtil.EndApp(); return; } ..

article thumbnail
Unity, Spine, SkeletonDataAsset has missing Atlas

Spine에서 만든 캐릭터를 Unity로 가져오는데 아래 그림과 같은 에러가 발생했다. 인터넷을 검색해보니, 스파인 프로그램에서 내보기 할 때, altas파일에 txt를 꼭 확인하라고 하는데, 잘 돼 있는데도, 에러가 계속 발생했다. (다른 스파인 파일들은 잘 되는데 얘만 안됐었음..) 이럴 떄는 아래와 같이 해보자. 우선 [Import without atlases]를 클릭하자. 아틀라스 없이 임포트 하는 경우 위와 같이 된다. 임포트 후 생성된, SkeletonData 파일을 클릭한 후, Inspector를 보면, Atlas Assets Size가 0임을 확인 할 수 있다. Atlas Assets Size를 1로 바꾸고, Element에 아틀라스 파일(왼쪽 빨간 박스)을 추가해보면, 이미지가 잘 적용 ..

article thumbnail
Unity, c# Http Get 통신
게임을 만들자/Unity 2020. 9. 8. 13:49

현재 나는 소켓통신으로 서버와 데이터를 주고 받지만, 게임의 버전 정보나, 이벤트 성 데이터를 받아 올 때는, Http통신을 이용하고 있다. 1. 코드 public static string HttpGet(string url) { string responseText = string.Empty; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "GET"; request.Timeout = 30 * 1000; // 30초 request.Headers.Add("Authorization", "BASIC SGVsbG8="); // 헤더 추가 방법 using (HttpWebResponse resp = (HttpWebRes..

Unity, String(Hex) To Color, Color To String(hex)
게임을 만들자/Unity 2020. 7. 22. 16:18

유니티 Color객체를 생성할 때, 생성자 파라미터로, rgba색상 값을 입력할 수 있다. 이때 r,g,b,a 각각의 값은 [0~1]사이의 소수점이다. 하지만 우리가 인터넷이나, 포토샵 등 원하는 색상값을 검색해 온 경우, 'FF00B5' 16진수 문자열 값을 얻어오는 경우가 많다. 이런 경우 Color객체를 생성하는 방법에 대해 알아보자. 1. String(Hex) To Color 16진수 문자열을 Color객체로 바꾸는 방법은, 16진수 문자를 각각을 [0~255]사이 숫자로 바꾸고, 그 결과를 255로 나눠주면 된다. public static Color StrToColor(string str) { str = str.ToLowerInvariant(); if(str.Length == 6) { char[..

article thumbnail
Unity Ui Slider, Pointer Up 이벤트
게임을 만들자/Unity 2020. 7. 19. 17:10

유니티 UI의 Slider는 HP바, 프로그레스바 등으로 많이 사용 되고 있다. 나 같은 경우, 사용자가 장비를 판매 할 때, 장비 등급에 따라 일괄 판매하도록 하는데, 그 표시 등급 설정 및 표시를 Slider를 사용하도록 했다. 1. Event Trigger Slider에 OnValueChaged라는 이벤트 함수를 등록할 수 있지만, 내가 원하는 건, 손을 뗐을 때 발생하는 이벤트 함수이다. 이 경우, 위와 같이 Event Trigger 컴포넌트를 사용해야 한다. Pointer Up 이벤트를 Slider 오브젝트에 추가하자. 2. 이벤트 함수 코드 아래 코드를, MonoBehavior를 구현한 객체 클래스에 넣자. public void OnSpideUp(BaseEventData eventData) {..

article thumbnail
Unity UI, 더블클릭, 드래그 앤 드랍
게임을 만들자/Unity 2020. 6. 9. 16:13

게임 중 장비를 장착하거나, 그 순서를 바꿀 때, [드래그 앤 드랍], [더블 클릭] 기능으로 유저들에게 편의를 제공 해 줄 수 있다. 사실 이 기능들이 구현이 어려운 건 아니나, 조금 작업이 귀찮긴 하다. 그래도 많이 쓰이는 만큼 알아두면 좋을 것이다. 1. 더블 클릭(double click) 나는 장비나 아이템을 장작할 때, ui에 [장착/해제]버튼을 구현 해 두었다. 그렇지만, 위와 같이, 더블 클릭 해 [장착/해제]를 할 수 있다면, 유저들이 더 편하게 게임을 이용할 수 있을 거라고 생각했다. public class EquipSlot : MonoBehaviour, IPointerClickHandler { ..... float currentTimeClick; public void OnPointerC..

article thumbnail
Unity 파티클 시스템
게임을 만들자/Unity 2020. 5. 23. 14:43

위의 장작불 위에 피어오르는 불꽃은 Unity 파티클 시스템을 넣은 것이다. 직접 sprite를 그려 할 수도 있었지만, Unity파티클 시스템을 이용하면, 간단하게 효과를 적용할 수 있다. 1. 파티클 오브젝스 생성 위와 같이 [Hierarchy]창에서 넣고 싶은 위치에 우클릭 해, 파티클 시스템 GameObject를 넣을 수 있다. 위 그림과 같이 파티클 시스템에는 너무 많은 옵션들이 있다. 이 옵션들을 다 설명하기는 힘들고, 주로 사용할 것 같은 것만 알아보자. 2. 파티클 오브젝트 설정 - 시뮬레이트 해보기 파티클 시스템 오브젝트를 클릭하면, 게임을 실행하지 않고도, Scene창에서 파티클 시스템을 시뮬레이트 해 볼 수 있다. (1) 파티클 입자 방향 및 속도 조절 - Start Speed : 파..

article thumbnail
MacOS Unity, VisualStudio for Mac 디버깅
게임을 만들자/Unity 2020. 5. 16. 03:03

예전에는 MacOs에서 Unity 스크립트 작성 툴로 Mono를 썼었다. 그런데 대략 2~3년 전 이었나? VisualStudio for Mac이 나오면서 드디어 MacOs에서도 VisualStudio를 쓸 수 있게 됐다. 물론 Unity와 연동 할 수 있도록 Package도 따로 배포 했다. VisualStudio for Mac 과 VisualStudio Code는 서로 다른다. [VisualStudio Code]는 인텔리J로 만들어진 툴로 [VisualStudio for Mac]보다는 좀 더 가볍운? 그런 툴이고, VisualStudio for Mac은 그냥 윈도우에서 쓰던 VisualStudio 그 자체다. 사실 VisualStudio Code만으로도 충분히 개발가능하지만, 서버개발 시 아무래도 N..