728x90

Unity 149

[Shader] Curved vertex shader

카메라에서 멀어지면 커브를 줘서 꺾이는 듯한 시각 효과를 주는 셰이더. 적용하면 아래처럼 보임. 1인칭 러닝게임에 어울리는 셰이더. 실제 Transform 좌표는 더 위에 있지만 셰이더 연산으로 곡선으로 꺾이게 그림. CG 코드. struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; float4 color : COLOR; }; struct v2f { float2 uv : TEXCOORD0; UNITY_FOG_COORDS(1) float4 color : TEXCOORD2; float4 vertex : SV_POSITION; }; v2f vert(appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.v..

[Unity] Shader Keyword 셰이더 키워드로 동작 조건부 작성

셰이더 키워드를 활용해서 조건부 분기 동작을 작성할 수 있다. #if defined(_MY_KEYWORD) // 이 사이에 KEYWORD 가 활성화 돼있을 때 처리를 추가. #endif float4 pos = v.vertex; #if defined(_CUSTOM_INSTANCING) float4x4 insMatrix = _instancingData[svInstanceID]; pos = mul(insMatrix, pos); #endif 셰이더를 위처럼 작성한 뒤 C# 코드에서는 EnableKeyword 함수를 호출해서 KEYWORD 를 활성화한다. 셰이더 키워드 https://docs.unity3d.com/kr/current/Manual/shader-keywords.html#declaring-keyword..

[Unity] Editor SceneView 에서 카메라 조작하기 (fov, position, rotation)

// Editor Scene View 에서 마지막 활성 Scene View 얻어오기. SceneView sceneView = SceneView.lastActiveSceneView; // FOV(Field of View) 수정 sceneView.cameraSettings.fieldOfView = 45f; // 특정 Object Transform 으로 Scene View 의 Camera 맞추기 (가령 메인카메라) sceneView.AlignViewToObject(camera.transform); // 특정 위치(바운드)로 Scene View Frame 이동시키기 sceneView.Frame(new Bounds(new Vector3(10f,0f,10f), Vector3.one * 10f), false); //..

[Unity] Addressable.LoadAssetAsync() 동기/비동기 처리

Addressables 클래스를 활용한 리소스 동기/비동기 로드 및 캐싱 처리 샘플 코드. // 비동기 처리 public void LoadAsync(string address, Action callback = null) where T : Object { string key = address; if(_loadedAssets.TryGetValue(key, out Object res)) { callback?.Invoke(op.Result); return; } var asyncOperation = Addressables.LoadAssetAsync(key); if (!asyncOperation.IsValid()) { Debug.LogError($"asset load failed : {address}"); retu..

[Unity] C# Finalizer 와 Garbage Collector 동작에 대한 정리

C++의 소멸자(Destructor)와 C#의 Finalizer의 공통점과 차이점 공통점 문법적으로 ~Class() {...} 로 코딩 클래스 객체가 소멸될 때 리소스를 해제하기 위해 사용 차이점 C++ 의 소멸자는 delete myObj; 와 같이 명시적으로 호출 시기를 정할 수 있음. C# 의 소멸자는 C++와 구분하기 위해 Destructor대신 Finalizer로 부름. Finalizer는 개발자가 그 호출을 명시적으로 결정할 수 없고, Garbage Collection 메커니즘에서 호출. 좀 더 구체적으로, C# 클래스에 Finalizer 가 존재하면, 해당 객체의 생성자 호출시 Finalization Queue라는 QC 내부 큐에 레퍼런스 추가. 이후, Managed Heap이 차서 GC처리를..

[Unity] Flags Attribute

enum 타입 앞에 [Flags] 어트리뷰트를 붙이면 Inspector 에서 여러 개를 선택 가능한 Bit Flags 처럼 사용할 수 있는데, 이 때 유의해야할 점. None = 0 을 앞이 두어서 아무것도 선택되지 않은 타입을 두는 게 좋다. 각 Enum 값들은 1, 2, 4, 8, ... 처럼 2진수 bit flag 한 자리씩 값을 갖는 숫자로 지정해줘야 한다. (자연수로만 구성하면 하나를 선택했을 때 다른 값도 같이 활성화되는 오동작을 할 수도 있음.) 아래는 샘플 코드. [Flags] public enum ETest { None = 0, Option1 = 1

[Unity] ScriptableObject의 CustomEditor가 있을 때 저장이 안 되는 문제

특정 ScriptableObject 에 CustomEditor를 선언하고 작업할 때, ScriptableObject가 저장되지 않는 경우가 있음. CustomEditor를 정의하면 직접 적용도 해줘야 하기 때문에 그런데, 아래처럼 serializedObject.ApplyModifiedProperties(); 함수를 호출해주면 됨. [CustomEditor(typeof(MyScriptableObject))] public class MyScriptableObjectEditor : Editor { public override void OnInspectorGUI() { DrawPropertiesExcluding(serializedObject, new string[] { "m_Script" }); serializ..

유니티 에셋 스토어 블랙 프라이 데이 50%~최대 70% 할인!

2023년 블랙 프라이데이, 유니티 에셋 스토어에서 대규모 할인 세일이 진행 중입니다. 이번 세일 기간에는 인기 에셋 300개 이상이 최소 50% 할인부터 시작하여, 플래시 딜 시간 동안 최대 70%까지 할인됩니다. $100 짜리 에셋을 $30에 구매할 수 있는 기회도 제공됩니다. 음악 패키지, 3D 소품, 백경 에셋 패키지 등을 저렴한 가격에 구매 가능합니다. 할인 정보는 아래 스토어 링크에서 확인할 수 있습니다. https://prf.hn/click/camref:1011lvz7h/pubref:sale/destination:https%3A%2F%2Fassetstore.unity.com%2F%3Fon_sale%3Dtrue%26orderBy%3D1 에셋스토어 여러분의 작업에 필요한 베스트 에셋을 찾아보세요..

[Unity] 드로우 콜 최적화 (Optimize DrawCall) 요약 정리

[유니티 TIPS] 유니티 최적화를 위한 필수 기본기! Batching 방법 소개 https://www.youtube.com/watch?v=w14yjBlfNeQ 0. 여러 개 메시(mesh), 여러 개 머티리얼을 : 최적화 없음 1. 여러 개 메시, 단일 머티리얼에서 UV좌표 나눠쓰기 : Batches 는 그대로, SetPass call 최적화 2. 동적 배칭 (Dynamic Batching) : Batches, SetPass Call 최적화. 동일 머티리얼의 작은 메시들은 버텍스 버퍼를 재활용 처리. 저가형 기기에서 성능을 최적화하도록 설계. (900개 이상의 버텍스 속성과 300개 이상의 버텍스를 포함하는 메시에 동적 배칭을 적용할 수 없음. 문서 참조.) https://docs.unity3d.com..

[Unity] Unity Engine 버전업 후 에러 메시지 Error : "The type or namespace name 'Newtonsoft' could not be found"

Newtonsoft.Json.JsonConvert 를 사용하고 있었는데, 유니티 엔진(Unity Engine)버전업 후 아래와 같은 에러 메시지가 출력될 경우. "The type or namespace name 'Newtonsoft' could not be found ~ " Newtonsoft 모듈 종속성 설정이 추가되지 않았기 때문. 엔진 버전업 하면서 모듈 설정이 날아가는 모양. Packages/manifest.json 을 열어서 "dependencies" 아래에 모듈 정보를 추가해주면 됨. "com.unity.nuget.newtonsoft-json": "3.0.2" 이렇게. 저장하고 유니티 엔진 리프래쉬 한 번 해주면 끝. GitHub : Newtonsoft Json for Unity https:/..

728x90
반응형