Unity & C# 19

Unity Graphics APIs 안드로이드 설정

Graphics API가 무엇이고, 안드로이드 플랫폼에서 어떻게 설정 해야하는가에 대한 정리 0. Graphics API 그래픽스 API 지원 - Unity 매뉴얼 Unity는 특정 플랫폼의 API 유효성에 따라 DirectX, Metal, OpenGL 및 Vulkan 그래픽스 API를 지원합니다. Unity는 빌트인 그래픽스 API 세트 또는 에디터에서 선택된 그래픽스 API를 사용합니다. docs.unity3d.com 1. Unity에서 설정하는 방법 ProjectSettings > Player > OtherSettings > Rendering > Graphics APIs 이때 Auto Graphics API가 체크되어 있다면 Graphics APIs 목록은 나타나지 않는다. 2. Graphics A..

ML-Agents을 이용한 간단한 게임 만들기

머신러닝 강화학습은 위와 같은 사이클로 동작한다. Agent는 테스트 환경을 관찰하여 데이터를 얻고(Observation), 그걸 바탕으로 결정을 내린다(Decision). 결정은 바로 행동으로 이어지고(Action), 행동이 테스트 의도와 맞을 경우 보상을 받는다(Reward). 이러한 과정의 반복을 통해 Agent는 어떤 결정과 행동이 가장 높은 결과를 내는지 학습한다. ML-Agents를 이용하여 간단한 머신러닝을 해보자. 파란색 네모는 Player Agent, 하얀색 구는 Goal이다. Player가 Goal에 도달하는 것이 목적인 게임이다. # MoveToGoalAgent.cs using Unity.MLAgents; public class MoveToGoalAgent : Agent { } Uni..

Unity ML-Agents 설치

unity.com/kr/products/machine-learning-agents 머신러닝 에이전트 | Unity 심층 학습 기술을 활용하는 툴킷으로 지능적인 반응형 에이전트를 만들어 보세요. unity.com Unity에서 간단하게 사용할 수 있는 머신러닝 툴을 제공한다. 몇 몇 설정만으로 복잡하고 고도화된 머신러닝 코딩 없이 ML-Agents를 이용하여 머신러닝을 구현해볼 수 있다. 0. 설치/작업 환경 Windows10 Windows PowerShell Unity 2021.1.0b5 (개인 작업용이기 때문에 그냥 최신 버전) ML Agents 1.7.2 1. Python 설치 ML-Agents는 Python 라이브러리를 사용하여 돌아간다. Python 3.6.x, 3.7.x, 3.8.x 버전을 설치..

[Effective C#] 1장. C# 언어 요소(아이템 1~5)

아이템 1: 지역변수를 선언할 때는 var를 사용하는 것이 낫다. 지역변수의 타입을 암시적으로 선언하는 것이 좋은 이유는 C# 언어가 익명 타입을 지원하기 위해서 타입을 암시적으로 선언할 수 있는 손쉬운 방법을 제공하기 때문이다. 정확한 반환 타입을 알지 못한 채 올바르지 않은 타입을 명시적으로 지정하면 득보다 실이 많다. IQueryable 컬렉션을 IEnumerable로 강제 형변환하게 되면 IQueryProvider가 제공하는 장점을 모두 잃게 된다. var를 사용하면 개발자 입장에서는 변수의 타입과 같이 지엽적인 부분보다 변수의 의미 파악에 더 집중할 수 있다. 컴파일러 관점에서 살펴본다면 개발자가 특정 객체의 타입을 명시적으로 지정하지 않더라도 객체 생성에 문제가 있을 경우 오류를 보고할 수 있..

(해석)ScriptableObject로 게임을 설계하는 3가지 방법

다음은 'Three ways to architect your game with ScriptableObjects' 포스팅을 해석하고 풀이한 글입니다. unity.com/how-to/architect-game-code-scriptable-objects?_ga=2.171725536.1554841006.1604417126-1616682105.1604129636 | Keep your code flexible, manageable, and easy to debug by architecting with ScriptableObjects. unity.com ScriptableObjects란 무엇인가?ScriptableObject는 serialize 가능한 Unity class로, script 인스턴스로부터 독립적인 공유..

Data based structure - ScriptableObject

ScriptableObject ScriptableObject는 클래스 인스턴스와는 별도로 대량의 데이터를 저장하는 데 사용할 수 있는 데이터 컨테이너입니다. ScriptableObject의 주요 사용 사례는 값의 사본이 생성되는 것을 방지하여 프로젝트의 메모리 사용을 줄이는 것입니다. 이는 첨부된 MonoBehaviour 스크립트에 변경되지 않는 데이터를 저장하는 프리팹이 있는 프로젝트의 경우 유용합니다. 이러한 프리팹을 인스턴스화할 때마다 프리팹에 이 데이터의 자체 사본이 생성되는데, 이와 같은 방법을 사용하여 중복 데이터를 저장하는 대신 ScriptableObject를 이용하여 데이터를 저장한 다음 모든 프리팹의 레퍼런스를 통해 액세스할 수 있습니다. 즉, 메모리에 데이터 사본을 하나만 저장합니다. ..

C# 박싱 / 언박싱 (Boxing/Unboxing), ArrayList

C#에서 모든 데이터 형식은 object를 상속 받는다. 1. Boxing Boxing은 Value Type(int, float, char, bool, struct, ...)의 데이터를 Reference Type(object, string, class, ...)으로 변환하는 프로세스이다. int i = 1; object o = i; // 암시적 Boxing 값 형식의 데이터는 메모리의 스택 영역에 할당되는데, Boxing을 통해 참조 타입인 object로 변환되면서 힙 영역에 복사된다. # Boxing.cs public class Boxing : MonoBehaviour { void Start() { int i = 1; object o = i; i = 2; Debug.Log("i : " + i); Deb..

Unity & C# 2020.08.29

IAP Restore Purchase (구매복구)

iOS의 경우 In App Purchase 항목에 Non-Consumable(비소모) 상품이 있을 경우, 필수로 수동 구매복구 기능을 지원해야 한다. (Google Play와 Universal Windows Applications와 같이 자동 복구를 지원하는 플랫폼에선 IStoreListener의 초기화 시점에 자동으로 복구된다.) public void OnInitialized(IStoreController controller, IExtensionProvider extensions) { extensions.GetExtension ().RestoreTransactions (result => { if (result) { // This does not mean anything was restored, // m..

C# Extension Method(확장 메서드)

https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/classes-and-structs/extension-methods 확장 메서드 - C# 프로그래밍 가이드 C#에서 확장명 메서드를 사용하면 새 파생 형식을 만들거나 다시 컴파일하거나 원래 형식을 수정하지 않고도 기존 형식에 메서드를 추가할 수 있습니다. docs.microsoft.com 확장명 메서드를 사용하면 새 파생 형식을 만들거나 다시 컴파일하거나 원래 형식을 수정하지 않고도 기존 형식에 메서드를 "추가"할 수 있습니다. 확장 메서드는 정적 메서드이지만 확장 형식의 인스턴스 메서드인 것처럼 호출됩니다. 확장 메서드를 사용하면 상속을 받거나 원래 클래스를 복잡하게 수정하는 것 없이 간..

2D Shader Graph - 디졸브 효과

다음과 같은 효과를 만들어 보자 먼저 Package Manager에서 Universal RP를 설치한다. Project Window에서 Create > Rendering > Universal Render Pipeline > Pipe Line Asset을 생성한다. PipelineAsset과 PipelineAsset_Render이 생성된다. PipelineAsset을 눌러보면 Renderer List에 PipelineAsset_Render가 ForwardRendererData로 들어가 있다. 3D Grahpics에 사용되는 Renderer이기 때문에 지워주고 2D Renderer를 생성하자 Create > Rendering > Universal Render Pipeline > 2D Renderer 이렇게 ..

Unity & C#/Graphics 2020.08.14