본문 바로가기

전체 글

알쓸신잡 애니메이션 지식finish로 꺼지는 과정에서 다시 배경을 누르게 되었을 때 자기자신을 다시 가게 될 수 있다. can transition to self를 끄게 되면 자기자신으로 다시 안간다.그렇다면 exit로 연결하고, can transition to self를 켰을 때도 자기자신으로 다시 가는지 확인 해보자 (해결되지 않음 , 차라리 코드로 현재 애니메이션을 체크해서 return하는 조건을 넣던가 아니면 can transition to self이걸 끄는게 맞다.)델리게이트는 클래스 내부에 정의 해도 다른곳에서 쓸수가 있다?쓸수있다. 왜냐하면 델리게이트는 객체의 멤버변수가 아니라 타입이기 때문에 A 안에 있는 타입 이름을 참조 하는 형태이다.람다(Lambda)는 이름 없는 함수(익명 함수)를 간단하게 만.. 더보기
개념정리 프로세스 - OS 실행 단위- OS가 만들어주는 실행 단위 (프로그램 자체)- 실제 메모리, 스레드, 파일 핸들 소유 .NET Runtime (CLR / Mono / IL2CPP) - C# 실행기- C# 코드를 실행해주는 실행기 (C# 실행 엔진)- GC 등 담당- AppDomain 생성 관리 AppDomain - C# 실행 공간- .NET 런타임이 만든 관리 코드 실행 경계 (C# 코드가 살아잇는 논리적 공간)- Assembly 로드 단위- 정적변수 및 타입 수명 관리 Assembly (DLL) - DLL : 컴파일된 코드가 들어 있는 "재사용 가능한 실행 코드 파일"- C# 코드의 컴파일 결과물 (코드 묶음 단위) Namespace - 클래스 정리용 논리 구분 (이름 정리) Class - 실제 로직 .. 더보기
오브젝트 랜덤 범위 방향 설정 (2.5D , 3D 방식) 방향 설정은 2가지 방식으로 할 수 있을 것 같다. 1. 사인 코사인 사용float angle = Random.Range(-70f, 70f);float rad = angle * Mathf.Deg2Rad;Vector3 dir = new Vector3( Mathf.Sin(rad), 0, Mathf.Cos(rad));- 범위를 잡아준다. (-70 ~ 70 사이는 부채꼴 모양이 될 수 있다.)- 디그리를 라디안으로 변환 (사인 코사인은 도가 아니라 라디안으로 계산하기 때문) - 좌우를 판별하는 속성에는 사인을 앞뒤를 판별하는 속성에는 코사인을 계산해서 넣어준다. 2. 쿼터니언 사용float angle = Random.Range(-70f, 70f);Vector3 dir = Quaternion.E.. 더보기
서버에서 이미지 가져오기 (내부 이미지 없음) private void Start(){ StartCoroutine(LoadImage());}private Image _image;private IEnumerator LoadImage(){ string url = "server address"; UnityWebRequest www = UnityWebRequestTexture.GetTexture(url); yield return www.SendWebRequest(); if (www.result != UnityWebRequest.Result.Success) { Debug.LogError("서버에서 텍스처를 받아오지 못했습니다."); } else { Texture2D texture .. 더보기
Debug Util 우리는 유니티에서 개발할 때 Debug.Log 등을 많이 사용한다. 개발 단계에서는 테스트 할 때 많이 사용되지만 실제 빌드하여 배포할 때는 로그 코드는 문제가 될 수 있다.1. 성능 문제- 런타임에서의 문자열 포맷팅 비용- 불필요한 cpu / 메모리 낭비2. 보안 문제- Debug.Log에서 실제 작성한 메세지는 배포 한 게임에서도 남아서 중요한 메세지가 있을 때 문제가 될 수 있음 그래서 전처리문을 사용을 한다.#if ~ #endif 하지만 이것도 사용하다보면 귀찮을 때가 있다. 그래서 유니티에서는 전처리기 심볼을 추가하거나 제거할 수 있는 시스템이 있다.PlayerSettings - Scripting Define Symbols 를 가보면 추가하거나 제거할 수 있는 공간이 있다. 그러면 이걸 활용해서.. 더보기
람다 식과 클로저 람다 식이란 C# 에서 익명 함수 (Anonymous Function)을 표현하는 하나의 방식이다.람다 식은 " => " 연산자를 활용하여 매개변수와 본문을 연결하는 식으로 만든다.(매개변수) => 본문; 람다는 식 하나를 지정하는 식 람다와, 중괄호 안에 본문을 지정해주는 문 람다로 나뉜다. 식 람다(매개변수) => 식;Action print = (string s) => Console.Write(s);위와 같은 식으로 활용한다. 델리게이트의 매개변수, 리턴 형식으로 암시적으로 하나의 매개변수의 타입을 확정지을 수 있을 때는 괄호와 타입을 명시하지 않아도 괜찮다.Func power = num => num * num; 물론 매개변수가 2개 보다 많아지면 괄호로 덮어줘야 한다.Func multiply = (.. 더보기
Awaitable Awaitable이란?C# System.Threading.Tasks의 대안으로 사용할 수 있는, 유니티 전용 비동기 프로그래밍을 할 수 있게 만든 Awaiter다. Runtime에서 호출되는 Task와 달리 유니티 업데이트 사이클과 연동되는 장점이 있다.예를 들면 EndOfFrameAsync를 사용할 경우 유니티의 각종 서브시스템이 모두 실행된 후에 프레임 마지막에 호출되는 것이 보장되는 식이다. 이와 같이 기존에 유니티에서 업데이트 루프와 연동되는 async/await를 사용하려면 UniTask 등의 외부 라이브러리를 사용했는데, 이제 유니티 엔진에 공식적으로 해당 역할을 하는 기능이 추가되었다. 단지 기능은 아직 부족하여서, 복잡한 작업을 처리하거나 세밀한 제어가 필요한 경우 여전히 UniTask를 .. 더보기
Unitask / Task 비교 먼저 기본 개념 요약항목 Task (기본 async/await) UniTask (Unity 전용 async/await)런타임 구조.NET CLR에서 ThreadPool, TaskScheduler 사용Unity 메인 스레드에서 작동, PlayerLoop에 통합내부 구조객체 생성 많음 (GC 발생), 박싱/언박싱 있음구조체 기반, 할당 없이 작동 (Zero Allocation)스레드 사용백그라운드 스레드 사용 가능대부분 메인스레드에서 실행됨성능 영향GC + 컨텍스트 스위칭으로 느림GC 없음, 더 빠름 C#의 기본 Task 동작 방식async Task MyAsyncMethod(){ awa.. 더보기