성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] VT sequences to "CONOUT$" vs. STD_O...
[정성태] NetCoreDbg is a managed code debugg...
[정성태] Evaluating tail call elimination in...
[정성태] What’s new in System.Text.Json in ....
[정성태] What's new in .NET 9: Cryptography ...
[정성태] 아... 제시해 주신 "https://akrzemi1.wordp...
[정성태] 다시 질문을 정리할 필요가 있을 것 같습니다. 제가 본문에...
[이승준] 완전히 잘못 짚었습니다. 댓글 지우고 싶네요. 검색을 해보...
[정성태] 우선 답글 감사합니다. ^^ 그런데, 사실 저 예제는 (g...
[이승준] 수정이 안되어서... byteArray는 BYTE* 타입입니다...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>Mono Profiler를 Unity의 Plugin으로 사용하는 방법</h1> <p> 아래의 글에 Mono Profiler를 Unity의 Plug-in으로 사용하는 방법이 나옵니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Access to Mono’s Low Level Profiling Functions in Unity ; <a target='tab' href='http://www.software7.com/blog/access-to-monos-low-level-profiling-functions-in-unity/'>http://www.software7.com/blog/access-to-monos-low-level-profiling-functions-in-unity/</a> </pre> <br /> 그런데, plugin으로 어떻게 Unity에 등록하는지는 설명이 빠져있어서 찾아 보니 Unity 측 매뉴얼에 자세히 설명되어 있습니다. ^^<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Plugins (Pro/Mobile-Only Feature) ; <a target='tab' href='http://docs.unity3d.com/Manual/Plugins.html'>http://docs.unity3d.com/Manual/Plugins.html</a> </pre> <br /> 위의 글에 보면 plugin은 pro 제품에만 되고, 보안상의 이유로 webplayer에는 안된다고 합니다.<br /> <br /> 자... 그럼 실습을 해볼까요? ^^<br /> <br /> 일단, 전에 만들어 둔 Mono Profiler를 이번 실습에서 그대로 사용합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Visual Studio에서 Mono 용 Profiler 개발 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/1805'>http://www.sysnet.pe.kr/2/0/1805</a> </pre> <br /> 위의 글에서 "mono --profile=..." 옵션으로 실행하는 경우 mono 측에서 프로파일러 DLL 내의 mono_profiler_startup API를 찾아서 실행해 주지만, "<a target='tab' href='http://www.software7.com/blog/access-to-monos-low-level-profiling-functions-in-unity/'>Access to Mono’s Low Level Profiling Functions in Unity</a>" 글에서는 MonoBehavior 상속 클래스에서 일부러 프로파일러 측의 초기화 함수를 불러주어야 한다는 차이가 있습니다.<br /> <br /> 이때 Plugin DLL의 배포 위치는 다음과 같습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > x86 DLL: Assets/Plugins/x86 x64 DLL: Assets/Plugins/x86_64 </pre> <br /> Unity 개발 환경에서 보면 그냥 Project 뷰에서 폴더를 만들어서 각각의 폴더에 파일이 놓여 있기만 하면 됩니다.<br /> <br /> <img alt='unity_profiler_1.png' src='/SysWebRes/bbs/unity_profiler_1.png' /> <br /><br /> 이렇게 놓고 빌드하면 ".\..._Data\Plugins" 폴더에 배포됩니다.<br /> <br /> DLL 배포가 확인되었으면, 이제 Unity 프로젝트에 Script 파일을 하나 추가하고 다음과 같이 DllImport 특성을 이용해 해당 파일을 PInvoke 구문으로 연결하고 호출하면 됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > using UnityEngine; using System.Runtime.InteropServices; public class ProfilerScript : MonoBehaviour { #if UNITY_IPHONE || UNITY_XBOX360 [DllImport ("__Internal")] #else [DllImport("mono-profiler-perf")] #endif <span style='color: blue; font-weight: bold'>private static extern void mono_profiler_startup(string arg);</span> void Start () { <span style='color: blue; font-weight: bold'>mono_profiler_startup(null);</span> } void Update () { } } </pre> <br /> Profiler가 제대로 동작하려면 이제 위의 스크립트를 자동으로 실행할 수 있게 해야 하는데요. 이를 위해 다음의 방법을 사용할 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Running Editor Script Code on Launch ; <a target='tab' href='http://docs.unity3d.com/Manual/RunningEditorCodeOnLaunch.html'>http://docs.unity3d.com/Manual/RunningEditorCodeOnLaunch.html</a> </pre> <br /> 따라서 ProfilerScript 코드를 다음과 같이 바꿔주면 됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > using UnityEngine; using System.Runtime.InteropServices; using UnityEditor; <span style='color: blue; font-weight: bold'>[InitializeOnLoad]</span> public class ProfilerScript { #if UNITY_IPHONE || UNITY_XBOX360 [DllImport ("__Internal")] #else [DllImport("mono-profiler-perf")] #endif private static extern void mono_profiler_startup(string arg); static ProfilerScript() { mono_profiler_startup(null); } } </pre> <br /> 이것이 어느 정도 빨리 불려지느냐는 알 수 없습니다. 아무리 빨리 불려도 Mono 런타임의 기본적인 메서드들은 이미 불린 상태일 것이기 때문에 JIT 컴파일을 콜백으로 받는 경우 이미 지나간 메서드에 대해서는 놓쳤다고 봐야 합니다.<br /> <br /> 어쨌든, 이런저런 제약이 있지만 그런대로 ^^ 쓸만하겠군요.<br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1776
(왼쪽의 숫자를 입력해야 합니다.)