분류 전체보기 613

WeaponAim의 Unrestrict3DAim 옵션 선택 시 다리를 조준하는 원인

코드를 분석결과 Weapon과 같은 GameObject에 있는 WeaponAutoAim에서 목표지점의 방향벡터를 구하는 부분 WeaponAutoAim.cs protected override void SetAim() { _aimDirection = (Target.transform.position - _raycastOrigin).normalized; _weaponAim.SetCurrentAim(_aimDirection, ApplyAutoAimAsLastDirection); } Target.transform.position 에서 타겟의 포지션을 받아오는데, 현제 게임의 Character들은 Root Transform의 y좌표가 0이고, 그로부터 위로 쌓아져 있다. Solution 1 Chracter의 Root..

Unity/TopdownEngine 2023.12.11

Character에 새 애니매이션 추가

📌https://futurecatlabs.store/413 위 블로그를 참조하면 원하는 애니매이션 Cip을 생성 할 수 있다. 단 위 예제에서는 단일 애니매이션 재생만 가능하고, 이를 기존에 제작된 AnimationController에 넣으면 제대로 동작을 하지 않는다. 👹 Error some generic clip animate transforms taht ar already bound by a Humanoid avatar. These transforms can only be changed by Humanoid clips. Avatar는 Animation과 3D 모델의 본 구조를 정의하고, 이 본들이 애니메이션 데이터에 어떻게 연결되는지 결정한다. 그리고 이 avatar와 연동되려면 Animation형..

Unity 2023.11.19

Strategy Pattern을 이용한 Unity Firebase 로그인

플랫폼별 로그인 분기에 사용 Android, UnityEditor, Ios일때 Firebase로그인 방법을 각각 다르게 구현하여야 한다. 연습용으로 해보기 좋은 것 같아 블로그에 기록해둠. 이 패턴으로 안하면 클래스에 If문으로 나누고, 여러 매소드를 만들어서 구현하면 된다. ex) private void MockLogin(); private void AndroidLogin(); private void IosLogin(); 📌Monobehavior 상속 비동기 처리를 위해 코루틴이 사용된다. 코루틴은 Monobehavior에서만 동작하므로 BaseLoginController는 Monobehavior를 상속하고, new가 아니라 addComponent로 씬에 추가하여야 함. 📌UnityAction 사용 비..

Unity 2023.10.15

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..