Unity/TopdownEngine 35

MeleeWeapon 일때 때리기 모션이 1회만 나오는 거 해결

공격모션 애니매이션을 SingleUseAnimationParameter에 할당한다. 첫 한대만 때리는 문제가 발생할 때는 StartAnimatonParameter에 할당되어 있었다. 로그상 채크해보면 쟤는 WeaponState == WeaponStates.WeaponStart 일때만 발생. 이건 최초 무기 사용때만 적용됨. 참고로 UseAnimationParameter 은 사용하는동안 지속되는 한가지 모션을 뜻한다. 움직이지 않고 첫 프레임에만 멈춰있음.

Unity/TopdownEngine 2024.04.10

Weapon Life cycle Debug

특이한 케이스에서 발생하는 엔진 자체의 버그인것 같음 다소 복잡하므로 나중을 대비하여 기록. Error Enemy의 Weapon이 재장전 상태에 있을 때 Enemy의 시야에서 벗어났다가 다시 재진입하면 공격을 하지 않는 버그 Description Weapon의 Lifecycle은 아래와 같음 (이 순서대로임) protected virtual void ProcessWeaponState() { if (WeaponState == null) { return; } UpdateAnimator(); switch (WeaponState.CurrentState) { case WeaponStates.WeaponIdle: CaseWeaponIdle(); break; case WeaponStates.WeaponStart: C..

Unity/TopdownEngine 2023.12.18

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

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

렉돌(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

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

무기 변경

UI Button을 눌렀을 때 무기가 바뀌는 원리 InputManager.cs CharacterInventory.cs protected override void HandleInput() { if (!AbilityAuthorized || (_condition.CurrentState != CharacterStates.CharacterConditions.Normal)) { return; } if (_inputManager.SwitchWeaponButton.State.CurrentState == MMInput.ButtonStates.ButtonDown) { SwitchWeapon (); } } InputManger클래스를 참조하고 있으면서 State에 따라 함수 호출 protected virtual void S..

Unity/TopdownEngine 2023.01.30

MMEvent 동작 원리

싱글톤 패턴에 Listener 등록하는 방식. 싱글톤 클래스에서는 누가 듣던가말던가 등록한 것들 Broadcast Android에서 EventBus처럼 쓰면 될듯함. Example (Achievement) Checkpoint.cs /// /// An event to trigger when a checkpoint is reached /// public struct CheckPointEvent { public int Order; public CheckPointEvent(int order) { Order = order; } static CheckPointEvent e; public static void Trigger(int order) { e.Order = order; MMEventManager.Trigger..

Unity/TopdownEngine 2023.01.29