[Unity] Debug.Log 커스터마이징
·
게임개발/Unity
유니티에서 가장 자주 쓰이는 함수가 뭘까? 개인적으로는 Debug.Log가 아닐까 생각한다.코드가 잘 돌아가는지, 값이 올바른지 등을 확인하기 위해 보통 Debug.Log로 메세지를 출력한다.Debug 종류는 Log, LogWarning, LogError 3가지로 각 상황에 따라 적절하게 사용한다. 그런데 이 Debug.Log에 내가 원하는 방식으로 수정할 수 있으면 좋지 않을까?예를 들어, Debug.Log를 호출한 클래스의 이름을 자동으로 메세지에 넣어 출력하게 해준다거나 Editor에서만 Debug.Log를 호출하도록 바꾸는 등 말이다. 1. 호출한 클래스 출력하기어떤 함수를 호출했을 때 해당 클래스의 이름을 출력하는 방법에는 여러가지가 있다.가장 간단한 방법은 호출하는 함수에서 this.Get..
[Unity] 안쓰는 함수 멋지게 표현하기 (System.Obsolete)
·
게임개발/Unity
Unity 뿐만 아니라 다른 모든 프로그래밍에서 함수나 클래스를 만들었다가 버리는 경우가 흔하다.보통 주석처리 하거나 아예 지워버리긴 하지만, 다른 사람들과 협업할 때 무작정 없애면 혼란이 생길 수가 있다.또한 이전 버전을 사용하는 사람에게 새로운 함수나 클래스로 변경하라는 메세지가 필요할 때도 있다. 이를 위해 Unity에서는 더 이상 사용하지 않는 함수나 클래스에 Obsolete 키워드를 넣어 해당 함수나 클래스가 더 이상 권장되지 않음을 표시할 수 있다. 0. System.ObsoleteObsolete 키워드는 선언 바로 윗 부분에 [System.Obsolete]를 적어 적용할 수 있다. 형태는 총 3가지가 존재한다.[System.Obsolete]: 기본 형태. 해당 메서드나 클래스가 권장되지 않음..
[Unity] NetworkVariable, INetworkSerializable Synchronization Problem
·
게임개발/Unity
유니티에서 넷코드는 멀티플레이 관련 기능을 제공하는 유용한 API다. 하지만, 그만큼 사용하기 어려우며 문제가 생기는 순간 디버깅 지옥이 펼쳐진다. 최근 NewtorkVariable과 INetworkSerializable을 사용해 변수 동기화를 진행하는데, 클라와 서버 간의 데이터가 동기화되지 않는 문제가 발생하였다. NetworkVariable의 ReadPermission을 Owner로 설정하고 NetworkSerialize 인터페이스 함수를 철저히 구현했는데도 도저히 동기화는 되지 않았다.//... in Test.csNetworkVariable testNet = new NetworkVariable(new TestNetClass(), NetworkVariableWritePermission.Everyon..
[Unity] StopCoroutine, 코루틴 중지시키기
·
게임개발/Unity
Unity의 코루틴은 비동기 처리를 위해 자주 사용된다. StartCoroutine을 통해 실행하면 유니티에서 알아서 비동기로 해준다.물론 코루틴은 메인 스레드에서 돌아가며, 멀티 스레딩이 아니라는 점을 유의해야한다. 자세한 내용은 #1, #2StartCoroutine(Susume()); 그런데, 실행한 코루틴을 다시 중지하려면 어떻게 해야할까? 1. StopCoroutine from inside먼저, 코루틴 내부에서 탈출하는 방법이 있다. 코루틴 함수에서 yield break를 하게 되면 함수에서 return하는 것과 같이 바로 빠져나올 수가 있다.IEnumerator CoroutineTest(){ while (true) { yield break; // 코루틴 종료 }}2. St..
[UE5] Replicate Montage Multicast in C++ not working
·
게임개발/Unreal Engine
언리얼5에서 멀티플레이 게임을 제작 중 몽타주 Multicast 실행이 안되는 상황에 마주쳤다. 처음에 PlayerController에서 ServerPlayMontage, MulticastPlayMontage를 만들어서 멀티캐스트 처리하도록 했었다.  그런데 서버에서 몽타주를 실행하면 다른 클라이언트에서 보이지 않았다.클라이언트에서 실행하면 다른 클라나 서버에서 잘 보였는데 말이다. 아무리 다른 변수들의 Replication을 설정하고 함수를 수정해봐도 고쳐지지 않았다. 다른 유튜브 영상을 참고했지만 모두 BP에서만 다루기만 했다.https://www.youtube.com/watch?v=s8j0RhW7xKE&ab_channel=GorkaGamesHow to Replicate Animation Montag..
[UE5] C++ AActor::Destroy() not working in BeginPlay()
·
게임개발/Unreal Engine
언리얼 개발 도중 액터를 파괴하려 Destroy를 호출했으나 작동하지 않았다. 다른 액터에서는 잘 되었는데 BeginPlay에 넣은 Destroy()만 안됐다.   호출 시점이 문제인건가, 아니면 다른 것이 문제인건가 고민하다 아래 링크를 발견했다. https://www.reddit.com/r/unrealengine/comments/jt5s61/c_aactordestroy_not_destroying_actor/ From the unrealengine community on RedditExplore this post and more from the unrealengine communitywww.reddit.com C++에서 Super::BeginPlay()를 호출해야 정상적으로 작동한다는 말이 있어 그대로..