Unity/유니티 엔진 동작 관련 맨텀 2019. 12. 21. 14:26
상태 패턴을 관리하는 클래스는 범용적으로 만들기 위해 제네릭 클래스로 만들었다. 제네릭 클래스여도 Mono를 상속받지 않는다면 new 로 초기화하면 된다. 아래의 StateMachine는 딱히 Mono를 상속안받아도 되는 클래스지만 디버깅을 위해 Mono를 붙여주었다. 그런데 몬스터가 가지고 있게 하려고 AddComponenet를 하니 Null 오류가 발생한다. // 컴포넌트로서 들어갈 클래스 public class StateMachine : MonoBehaviour { } public abstract class MonsterBase : CharacterBase { [SerializeField] public StateMachine StateMachine; void Start() { // Null이 발생하..
Unity/유니티 엔진 동작 관련 맨텀 2019. 12. 11. 18:12
유니티 이벤트로 직접할당하는방법은 간편하지만 세가지 문제점이있다. 1) 함수이름바꾸면 참조 다 깨짐. 2) 레퍼런스 보려면 일일히 인스펙터 찾아가야 함 3) 참조된게 CodeLens에 안 나타남 따라서 이벤트 Action으로 주입하는 방법을 사용하기도 한다. // 방법 1 : AddListener로 함수 할당하기. 에디터상에서는 안보이니 주의 public class StartFlowManager : MonoBehaviour { [SerializeField] Button Btn_Title_popup; [SerializeField] GameObject Title_Popup; private void Awake() { Btn_Title_popup.onClick.AddListener(PressBtnTitlePop..
Unity/유니티 엔진 동작 관련 맨텀 2019. 11. 21. 17:55
인터페이스를 가지고 있는지 확인하고 특정 메소드를 호출하기. 1 2 3 4 5 6 if (Physics.Raycast(ray, out RaycastHit hit, Mathf.Infinity, layerMask)) { // 인터페이스를 호출 IDamagable IDamagable = (IDamagable)hit.collider.GetComponent(typeof(IDamagable)); IDamagable.Damaged(); } 추가적으로 인터페이스를 클래스 내부에서 인터페이스를 구현 할 때 인터페이스를 암묵적으로 구현할 경우 public 클래스 멤버로 외부 호출이 가능. public bool DeathBoom { get; set; } 명시적으로 구현 할경우 private 클래스 멤버가 되어 먼저 인터페이..
Unity/유니티 엔진 동작 관련 맨텀 2019. 10. 15. 21:10
씬이 로딩될 때 호출시켜야하는 함수들이 종종 생긴다. 예전에는 SceneManager.onSceneLoaded를 사용해서 관리했는데, 이게 없어지면서 유니티 공식문서에서는 SceneManager.sceneLoaded 델리게이트 체인을 걸어서 사용할 것을 권장하고 있다. 사용법은 아래와 같다. using UnityEngine; using UnityEngine.SceneManagement; public class ExampleCode : MonoBehaviour { void Start() { DonDestroyOnLoad(); // Start는 최초 씬에서만 호출된다. } void OnEnable() { // 씬 매니저의 sceneLoaded에 체인을 건다. SceneManager.sceneLoaded +=..
Unity/유니티 엔진 동작 관련 맨텀 2019. 5. 1. 02:30
유니티 코루틴 호출하는 방법 2가지가 있다. [ A ] 직접 호출 StartCoroutine(Method()); StartCoroutine(Method(object value)); // 매개변수 [ B ] String 호출 StartCoroutine("Method"); StartCoroutine("Method", value); B는 스트링이라 호출 오버헤드가 발생. 이후의 성능 차이는 없다고 한다. 하지만 그렇다고 A를 쓰기엔 주의해야 될 점이 있는데, A방식으로 호출한 코루틴은 StopCoroutine을 사용할 때 string으로 호출해도 중지시킬 수 없다. StartCoroutine( Method()); StopCoroutine( Method()); // 중지되지않음 : 잘못된 사용법 StartCor..
Unity/유니티 엔진 동작 관련 맨텀 2019. 1. 6. 01:26
유니티 커스텀 프로퍼티 드로워를 정리하려했으나,내용이 많아서 일단 누군가 구현해 놓은 스크립트를 사용하기로 함. u/WaterfordSS : https://www.reddit.com/user/WaterfordSS 이분이 구현해놓은 drawer 스크립트들은 정말 범용성이 대단하다; 1. AudioDrawer https://www.reddit.com/r/Unity3D/comments/5n6ddx/audioclip_propertydrawer/ 2. SpriteDrawer https://www.reddit.com/r/Unity3D/comments/5cxzcj/sprite_property_drawer/ 스트럭처 배열에서는 sprite가 뭔가 세로로 길게 보여서 34번줄에 position.width = _textu..