전체 글 607

Inspector에서 변수 타입을 동적으로 설정 (MMEnumCondition)

* 자세한 구현은 MMLoot 클래스 참조 List의 경우 바로 쓰면, 다른 enum이 선택되어도 사라지지 않고 계속 남아있어서 클래스로 한번 싸서 적용. public enum ExpModes { Unique, List, ScriptableObject } [Space(10)] [Header("데이터 타입")] public ExpModes ExpMode = ExpModes.Unique; [MMEnumCondition("ExpMode", (int)ExpModes.Unique)] [SerializeField] private int expPoint; [MMEnumCondition("ExpMode", (int)ExpModes.List)] [SerializeField] private MMCustomList expL..

Unity/TopdownEngine 2023.08.15

스크롤뷰 두개 동시에 움직이기

Horizontail과 Vertical을 각각 만들거나, ScrollView끼리 Hierachy관계인 경우 입력에 따라 단 하나의 스크롤뷰만 움직인다. (직접 해보면 덜걱거려서 부자연스러운 UX가 됨) 기본적으로 한놈만 작동하고 다른건 다 쌩까도록 구현되어있음. 동시에 움직이고 싶을 경우 무시받고 있는 ScrollView에게 직접 Event를 전달해주면 된다. using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; public class DragDispatcher : MonoBehaviour, IBeginDragHandler..

중첩된 LayoutView가 제대로 작동하지 않을 때

LabelGroup과 하위의 BranchLabel, TagLabel에 모두 HorizontailLayoutView가 있음 하위의 LayoutView가 업데이트 내역이 상위 LayoutView에 제때에 적용이 안되서 문제인듯? Solution (야매) 상위 Layout Group의 Control Child Size 체크하니까 된다 Solution (덜 야매) 👹원인 😀해결 ContentSizeFilter는 자손 컨텐츠의 크기에 따라 자동으로 LayoutView의 크기를 맞춰주는 역할을 하는 컴포넌트. ContentSizeFilter를 임의로 Refresh시킴. [SerializeField] private ContentSizeFitter sizeFitter; private void RefreshContent..

인스펙터(Inspector)에 테스트 버튼 만들기

InventoryManager 컴포넌트에 버튼을 달고 싶은 경우, using UnityEngine; using UnityEditor; [CustomEditor(typeof(InventoryManager))] public class Test : Editor { public override void OnInspectorGUI() { base.OnInspectorGUI(); var inventoryManager = target as InventoryManager; if (GUILayout.Button("Test1")) { if (inventoryManager) { inventoryManager.Test1(); } } if (GUILayout.Button("Test2")) { if (inventoryManage..

내가 부모의 몇 번째 Active된 자식인지 반환하는 함수

private int GetViewIndex() { var cnt = -1; for (var i = 0; i < transform.parent.childCount; i++) { var view = transform.parent.GetChild(i); if (view.gameObject.activeSelf) { cnt++; if (view.transform == transform) return cnt; } } return cnt; } 다른방법 https://qits.tistory.com/entry/GetComponentsInChildren-%EC%9E%90%EC%8B%9D%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8A%B8%EC%97%90%EC%84%9C-%ED%99%9C%EC%84%B1%EB..

렉돌(Ragdoll) 구현

1. 캐릭터 모델에 콜라이더 생성 https://huiyoi.tistory.com/121 Total Mass 값은 래그돌의 무게를 정하는 값이다. 이 값을 정해주면 사람의 평균적인 부위별 무게 비율에 맞춰 각 본들의 무게가 정해진다. 유니티에서 말하는 Mass 값의 기본 단위는 1값이 1kg이라고 하기 때문에 Total Mass 값은 임시로 45kg Strength 값은 래그돌이 모양을 유지하고 붕괴되지 않도록 도와주는 힘에 대한 값이다. (래그돌이 적용된 게임에서 종종 사망한 캐릭터의 몸이 엿가락처럼 늘어나서 마구 흔들리는 문제는 이 Strength 값이 낮아서 발생하는 문제이다.) Root 뼈대에 Collider 가 생긴다. 충돌준비 완료 2. Topdown Engine에서 Ragdoll Compon..

Unity/TopdownEngine 2023.05.25

URP 쉐이더 종류

📕 개념 https://velog.io/@astray36/%EC%98%A4-%EA%B0%9C-URP%EC%9D%98-%EA%B0%9C%EB%85%90 오-개) URP의 개념 Universal RP는 결국 쓰게 되겠지만 아직 호환성이라던가 조금 다루기 난해한 부분이 있다. 그래서 기피한 것도 있고. 일단은 한번 알아보자LWRP(Light Weight Render Pipline)로 시작해서 URP(Universal Render Pipl velog.io https://mrbinggrae.tistory.com/243 Universal Render Pipeline 대충이라도 알고 쓰자 * 내가 그래픽 작업자도 아니고 배운다고 써 먹을 수도 없을 거 같아서 딱 필요한 부분만 공부한 내용을 정리해놨다. (특히 까막눈..

DontDestroyOnLoad의 적용범위

StageController는 DontDestroyOnLoad인 싱글톤 클래스 빠르게 진행하여 과정에 대한 기록은 다소 미흡하니 결과만 체크할 것 1. Dependency가 있는 GameObject(Component) Dependency가 있어도 다음 씬에선 나가리 2. 동일한 GameObject DontDestroyOnLoad인 컴포넌트와 같은 GameObject면 같이 다음 씬으로 데리고 간다. Denpendency가 있던 없던 상관없다 3. 자식 GameObject 자식 GameObject도 모두 함께 간다 4. 내부에서 생성된 클래스 using System; using System.Collections; using System.Collections.Generic; using MoreMountain..

Scene 이동 간에 유지되는 GameObject

🧰 MMPersistentSingleton을 상속한 클래스의 Instace를 가져오면 자동으로 DontDestroy영역에 해당 클래스가 생성됨 🧰 그냥 MMSingleton 클래스는 DontDestroyOnLoad 없음 GameManager.cs public class GameManager : MMPersistentSingleton, void Awake() { GameManager.Instance.MaximumLives = 1; } MMPersistentSingleton.cs public class MMPersistentSingleton : MonoBehaviourwhere T : Component { protected virtual void Awake () { InitializeSingleton(); ..

Unity/TopdownEngine 2023.03.10

Weapon 능력치 동적 변경 계획

게임 진행 중 Weapon의 능력치 (공격속도, 데미지 등) 을 변경 계획 Static 능력치 1. Scriptable Object에 초깃값 및 레벨 별 능력치가 이미 기록되어 있음. 2. Level에 따라 무기의 능력치 초기화 Dynamic 능력치 1. 능력치를 컨트롤하는 Manager가 전역적으로 있음 2. Weapon과 Bullet에 Listener가 있음. 이 친구는 모든 Weapon과 Bullet에 붙어있음 3. Manager에서 BroadCast하면 각 Listenr에서 이를 Observer하여 반영

Unity/TopdownEngine 2023.02.15