학원

49일차 - 2024-09-25

하타라시 2024. 9. 25. 19:14

 

분명 예전에 UML배웠었는데, 가물가물하여 이정도로만 사용할 것 같습니다.

실제 사용 방법과 다를 수 있습니다..

https://brownbears.tistory.com/577

먼저 간단한 부분부터 시작입니다.

Player와 Enemy는 Character를 상속받습니다.

 

Character는 필요한 컴포넌트들을 시작 시에 만들도록 유도하고, 만약 애니메이션 중에서 Motion이 None인 경우 animator의 값대로 Character의 포지션이 이동하는 것입니다.

 

 

만일 해당 코드를 override한다면 Apply Root Motion에서 Handled by Script로 바뀝니다.

Root Motion Mode가 Root Motion인 것들도 문제없이 작동됩니다.

 

 

Player는 Character를 상속받고, Awake랑 Start를 재정의하여 사용합니다.

base.Awake나 base.Start를 하면 부모의 코드도 실행할 수 있습니다.

추가로 sealed를 붙이면 더이상 재정의가 불가능합니다.

 

 

Enemy는 IDamagble를 상속받아서 데미지를 받을 수 있도록 구성됩니다.

OnDamage를 실행하면 색깔이 변하고, 애니메이션 잠시 멈추고, 밀격 거리가 있다면 distance만큼 밀려나는 구성이 있습니다.

 

 

rootObject는 Child1의 부모 즉 Parent입니다.

damage?.OnDamage를 하게되면 damage가 있을경우에 실행됩니다.

즉 캐릭터 밑에 검이 있다고 하면, 검을 통해서 캐릭터의 위치를 얻는 것입니다.

 

 

 

레이어를 만들고, 다리는 애니메이션이 실행되지 않고 섞이게 될 것입니다.

 

Sub_State_Machine을 활용하면 깔끔합니다!

조건으로 진입되므로 Any State에 진입점이있고, 그 외에는 진입점이 없습니다.

 

 

Dead체크 같은 경우도 람다로 간단하게 표현 가능합니다.

 

피격 시 Impact활성화합니다.

 

 

 

제가 이해한 바는 이런 형태입니다.

우선 Player가 공격을 하면 WeaponCompnent에 공격하라고 명령이 내려지고, 

WeaponComponent는 딕셔너리에 해당하는 WeaponComponent의 공격과 Weapon의 공격이 구현된 내용을 통해 애니메이션이 실행됩니다.

Enemy는 Weapon을 상속받은 클래스의 피격 당할경우 IDamagalbe의 인터페이스를 통해 Damage액션이 취해집니다.

그리고 Enemy안에서 HPComponent로도 체력을 닳도록 하고, 그외에 연출을 실행합니다.

 

StateComponent의 경우는 솔직히 아직 미숙해서 더 공부해야할듯합니다...

 

 

 

 

감사합니다.