본문 바로가기

프로그래밍/Unity

(6)
Unity - StateMachineBehaviour를 얻는법 https://docs.unity3d.com/kr/530/ScriptReference/StateMachineBehaviour.html Unity - 스크립팅 API: StateMachineBehaviour docs.unity3d.com 유니티에서 제공하는 StateMachineBehaviour는 알고 있었지만, 이를 적극적으로 사용해본적이 없었다. 애니메이션 transition시에 해당 gameObject를 destroy 해주는 정도로 밖에 사용하지 않았었는데, 이를 Layer에다 붙여놓고 animator를 사용하는 곳에서 쓸 수 있다는 걸 오늘 알았다. using System; using UnityEngine; public sealed class InvokeOnStateExit : StateMachin..
[Unite Seoul 2019] 양진석 - 효과적인 에셋 관리를 위한 어드레서블 에셋 시스템 소개 정리
UnityEvent vs C# Event : 무엇을 쓸까? Unity를 사용하면서, UnityEvent와 C# Event 중 어떤 것을 사용해야할지에 대한 고민이 들었다. 평소에는 보통 C# Native Event를 주로 사용했다. 이유는 크지 않았다. UnityEvent, UnityAction 보단 System.Action이 더 익숙하고 편했기 때문이다. UnityEvent가 C# Event에 비해 가지고 있는 장점은 Serialize 된 이벤트 객체라서 Editor에서 바인딩이 된다는 거 정도로 알고 있었다. 근데 그 마저도 스크립팅의 AddListener() 메서드로는 Editor에서 확인이 안되기 때문에, 스크립팅을 통해 주로 바인딩하는 나에게는 전혀 이점이 없었다. 외부 라이브러리 중에서 UnityEvent를 사용하는 것들이 있다보니, 코드에 Unity..
Unity SceneManager.sceneLoaded Unity 코드 작성 중, 해당 Scene이 모두 로드되었을 경우 어떤 작업을 해줘야하는 일이 있어 관련 API를 찾아보았다. UnityEngine.SceneManagement 네임 스페이스안의 SceneManager.sceneLoaded 이벤트에 자신의 이벤트를 추가해주면 된다. 다만 새로 알게 된 것은, MonoBehaviour의 OnEnable에서 해당 이벤트에 추가하는 경우에도 정상적으로 씬의 로드 이벤트 통지를 받을 수 있다는 것이다. 생각하기로는, SceneManager.sceneLoaded가 먼저 호출이 된 뒤, MonoBehaviour.OnEnable의 순서일 줄 알았는데, 오히려 그 반대로 해당 씬의 모든 오브젝트의 OnEnable을 호출 한 뒤 씬 로드 이벤트가 발생한다. https:/..
유니티 테스트 러너(Unity Test Runner) 최근 클린 코드, 클린 코더라는 책을 읽으면서 TDD에 대한 의지가 생겼다. 두 책 모두 유닛 테스트의 중요성에 대해 많은 지면을 할애하여 설명하고 있었다. 그렇지 않아도 진행하던 개인 프로젝트의 규모가 점점 커져가고 있어 복잡도가 높아지고 있어 좋은 기회라는 생각이 들었다. 유니티는 Unity Test Runner라는 이름으로 자체 유닛 테스트를 지원하고 있었다. 공식 문서를 살펴보니 유닛 테스트는 EditMode와 PlayMode의 두 가지 종류가 있다. EditMode는 본래 내가 생각하던 유닛 테스트의 개념으로 생각하면 될 것 같았다. 그에 반해 PlayMode는 테스트를 실행하는 경우 우선 Play상태가 되고, 코루틴을 지원하는 등의 유니티 특화 사양의 유닛 테스트로 이해했다. TDD를 진행해본..
Unity Reflection을 이용한 Factory pattern 구현. Unity에서 사용할 factory pattern을 구현하던 도중 Unity3d College라는 채널에 올라온 영상을 보고 구현. 채널 자체는 기본적인 내용들이 들어가있어서 둘러보기 괜찮을 것 같다. 코드는 영상과 같진 않고, 조금씩만 바꿨다. public interface IHaveStringIdentifier { string Identifier { get; } } public interface IBuffBehavior : IHaveStringIdentifier { void DoBuffBehavior(); } public sealed class BonusHPBuff : IBuffBehavior { public string Identifier => BuffBehaviorType.BonusHp.ToStr..