<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Ssssong += Dev</title>
    <link>https://songyeongkim.tistory.com/</link>
    <description>디자이너 출신의 게임 개발 도전기!</description>
    <language>ko</language>
    <pubDate>Wed, 6 May 2026 15:12:43 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>ssong_dev</managingEditor>
    <image>
      <title>Ssssong += Dev</title>
      <url>https://tistory1.daumcdn.net/tistory/5334501/attach/7c32ff1411004ed6a8947d8acb0b38bd</url>
      <link>https://songyeongkim.tistory.com</link>
    </image>
    <item>
      <title>[ProjectT]엑셀 시트에서 대화 스크립트 연동 개발</title>
      <link>https://songyeongkim.tistory.com/155</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;kakaotv&quot; data-video-url=&quot;https://tv.kakao.com/v/437714979&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/dhHNrh/hySr9xsfM3/SGTHI0inCPbwVZ89mow4N0/img.jpg?width=1920&amp;amp;height=1080&amp;amp;face=0_0_1920_1080,https://scrap.kakaocdn.net/dn/csrHkX/hySskr7HTF/QZHDebGUdfRpIYguKbxQ5K/img.jpg?width=1920&amp;amp;height=1080&amp;amp;face=0_0_1920_1080&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-play-service=&quot;daum_tistory&quot; data-original-url=&quot;&quot; data-video-title=&quot;&quot;&gt;&lt;iframe src=&quot;https://play-tv.kakao.com/embed/player/cliplink/437714979?service=daum_tistory&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발</category>
      <author>ssong_dev</author>
      <guid isPermaLink="true">https://songyeongkim.tistory.com/155</guid>
      <comments>https://songyeongkim.tistory.com/155#entry155comment</comments>
      <pubDate>Tue, 2 May 2023 15:46:43 +0900</pubDate>
    </item>
    <item>
      <title>[유니티] URP에서 Transparency sort order 지정</title>
      <link>https://songyeongkim.tistory.com/154</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;713&quot; data-origin-height=&quot;441&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bauzm8/btsaeuyAzmo/xmW2KeTVRBgZcGPu7JuLvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bauzm8/btsaeuyAzmo/xmW2KeTVRBgZcGPu7JuLvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bauzm8/btsaeuyAzmo/xmW2KeTVRBgZcGPu7JuLvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbauzm8%2FbtsaeuyAzmo%2FxmW2KeTVRBgZcGPu7JuLvK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;713&quot; height=&quot;441&quot; data-origin-width=&quot;713&quot; data-origin-height=&quot;441&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Transparency sort order 설정이 안 되어 있을 경우 이렇게 스프라이트 순서가 어긋나게 출력될 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Z축을 기준으로 그리는 순서가 결정되는데, 지금 프로젝트에서는 스프라이트를 기울여서 쓰고 있어서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각도에 따라 스프라이트 순서가 바뀌어 버리는 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;URP가 아닌 경우 Project Settings -&amp;gt; Graphics에서 Custom Axis를 설정해주면 되는데, URP에서는 어디에 있는가...?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;542&quot; data-origin-height=&quot;269&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c5fGGh/btsaeuL7s5L/uWKTkHBvRK1pIOAp4Wh2v1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c5fGGh/btsaeuL7s5L/uWKTkHBvRK1pIOAp4Wh2v1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c5fGGh/btsaeuL7s5L/uWKTkHBvRK1pIOAp4Wh2v1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc5fGGh%2FbtsaeuL7s5L%2FuWKTkHBvRK1pIOAp4Wh2v1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;542&quot; height=&quot;269&quot; data-origin-width=&quot;542&quot; data-origin-height=&quot;269&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기 있다. Create -&amp;gt; Rendering -&amp;gt; 2D Renderer Data를 생성하면 이렇게 Custom Axis를 설정할 수 있게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;870&quot; data-origin-height=&quot;465&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLwBUc/btsaf8nSTEd/DMM23hNjoxJmGOj3F8AT1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLwBUc/btsaf8nSTEd/DMM23hNjoxJmGOj3F8AT1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLwBUc/btsaf8nSTEd/DMM23hNjoxJmGOj3F8AT1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLwBUc%2Fbtsaf8nSTEd%2FDMM23hNjoxJmGOj3F8AT1k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;870&quot; height=&quot;465&quot; data-origin-width=&quot;870&quot; data-origin-height=&quot;465&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 순서가 정상적으로 출력된다.&lt;/p&gt;</description>
      <category>개발/공부</category>
      <author>ssong_dev</author>
      <guid isPermaLink="true">https://songyeongkim.tistory.com/154</guid>
      <comments>https://songyeongkim.tistory.com/154#entry154comment</comments>
      <pubDate>Fri, 14 Apr 2023 18:52:26 +0900</pubDate>
    </item>
    <item>
      <title>[ProjectT] Message 교환 패턴</title>
      <link>https://songyeongkim.tistory.com/153</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;kakaotv&quot; data-video-url=&quot;https://tv.kakao.com/v/437194002&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/bUhxf4/hySe58PAbk/PiPcyCpBb3vGX2Js7ZaZBk/img.jpg?width=1920&amp;amp;height=992&amp;amp;face=0_0_1920_992,https://scrap.kakaocdn.net/dn/hTa02/hySe8R3x3k/TO2QSHUWhNyPQLptHvkRWK/img.jpg?width=1920&amp;amp;height=992&amp;amp;face=0_0_1920_992&quot; data-video-width=&quot;860&quot; data-video-height=&quot;444&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;444&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-play-service=&quot;daum_tistory&quot; data-original-url=&quot;&quot; data-video-title=&quot;&quot;&gt;&lt;iframe src=&quot;https://play-tv.kakao.com/embed/player/cliplink/437194002?service=daum_tistory&quot; width=&quot;860&quot; height=&quot;444&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카메라를 세팅했다. 돈스타브를 레퍼런스로 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전회사에서 메시지 패턴을 이용한 이동 처리 구현을 공부했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공부용으로 남아 있는 코드가 있지만 이번 개인 프로젝트는 혼자서 해결책을 생각하기 힘든 구조들은 코드를 참고 하되,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최대한 내부 기능들을 스스로 구현하는 것을 목표로 하고 있기에 새로 짜고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메시지 교환 패턴을 구현하기에 앞서 Chat GPT에 기본 구조를 물어보고 최대한 가벼운 골격부터 잡기로 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 내가 필요한 메시지 정보들을 채워넣으면 되겠지.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;669&quot; data-origin-height=&quot;1217&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eiFtRf/btr9DUCwdNI/KdN9kH1SkOB5hjKch0fYAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eiFtRf/btr9DUCwdNI/KdN9kH1SkOB5hjKch0fYAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eiFtRf/btr9DUCwdNI/KdN9kH1SkOB5hjKch0fYAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeiFtRf%2Fbtr9DUCwdNI%2FKdN9kH1SkOB5hjKch0fYAK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;669&quot; height=&quot;1217&quot; data-origin-width=&quot;669&quot; data-origin-height=&quot;1217&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정말 간단한 큐 구조이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 이걸 그대로 MessageManager로 만들었다.&lt;/p&gt;
&lt;pre id=&quot;code_1681209870474&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class AIMessageManager : Singleton&amp;lt;AIMessageManager&amp;gt;
{
    private Queue&amp;lt;AIMessage&amp;gt; _messageQueue;

    public AIMessageManager()
    {
        _messageQueue = new Queue&amp;lt;AIMessage&amp;gt;();
    }

    public bool CheckExistMessage()
    {
        return _messageQueue.Count &amp;gt; 0;
    }

    public void EnqueueMessage(AIMessage message)
    {
        _messageQueue.Enqueue(message);
    }

    public AIMessage DequeueMessage()
    {
        if(_messageQueue.Count &amp;gt; 0 )
        {
            return _messageQueue.Dequeue();
        }
        else
        {
            return null;
        }    
    }

    public override void Dispose()
    {
        _messageQueue.Clear();
        _messageQueue = null;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이동 시 Message로 필요한 값은 direction, position, target로만 세팅했다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1681209898920&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public enum eAIMessageType
{
    None = 0,
    Move,
    Attack,
    Max
}

//캐릭터 이동 및 공격에 관한 메시지. 
public class AIMessage : Message
{
    //캐릭터 ID, 행동 타입, 방향 등 설정되어야 한다.
    public long ID;
    public Vector3 Direction;
    public Vector3 Position;
    public Vector3 Target;

    public AIMessage() 
    { 
        ID = 0;
        Direction = Vector3.zero;
        Position = Vector3.zero;
        Target = Vector3.zero;
        eAIMessageType = eAIMessageType.None;
    }

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 조작키 입력 시 이렇게 메세지 큐에 메세지를 넣어 두고&lt;/p&gt;
&lt;pre id=&quot;code_1681210097225&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;private void InputMove(Vector3 direction)
        {
            AIMessage moveMessage = new AIMessage();
            moveMessage.Direction = direction;
            moveMessage.eAIMessageType = eAIMessageType.Move;
            AIMessageManager.Instance.EnqueueMessage(moveMessage);
        }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LateUpdate에서 프레임 당 하나씩 Dequeue되고 있다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1681210157863&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; private void LateUpdate()
        {
            ProcessMessage();
        }

        //메세지 처리
        private void ProcessMessage()
        {
            if(AIMessageManager.Instance.CheckExistMessage())
            {
                AIMessage message = AIMessageManager.Instance.DequeueMessage();
                
                switch(message.eAIMessageType)
                {
                    case eAIMessageType.Move:
                        WorldView.PlayerCharacter.CharacterMove(message.Direction);
                        break;
                    case eAIMessageType.Attack:
                        break;
                }
            }
            
        }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>ssong_dev</author>
      <guid isPermaLink="true">https://songyeongkim.tistory.com/153</guid>
      <comments>https://songyeongkim.tistory.com/153#entry153comment</comments>
      <pubDate>Tue, 11 Apr 2023 19:53:57 +0900</pubDate>
    </item>
    <item>
      <title>[C#] IComparable 인터페이스</title>
      <link>https://songyeongkim.tistory.com/149</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://ehpub.co.kr/c-8-2-5-icomparable-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%EC%99%80-icomparer-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://ehpub.co.kr/c-8-2-5-icomparable-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%EC%99%80-icomparer-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1672999368912&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;[C#] 8.2.5 IComparable 인터페이스와 IComparer 인터페이스 &amp;ndash; 언제나 휴일&quot; data-og-description=&quot;IComarable 인터페이스와 IComparer 인터페이스는 개체의 값 비교를 제공하기 위해 정의되었습니다. C#의 컬렉션은 대부분 Sort 메서드를 제공하는데 IComparable 인터페이스 기반의 요소를 보관하고 있을&quot; data-og-host=&quot;ehpub.co.kr&quot; data-og-source-url=&quot;https://ehpub.co.kr/c-8-2-5-icomparable-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%EC%99%80-icomparer-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4/&quot; data-og-url=&quot;https://ehpub.co.kr/c-8-2-5-icomparable-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%EC%99%80-icomparer-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://ehpub.co.kr/c-8-2-5-icomparable-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%EC%99%80-icomparer-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ehpub.co.kr/c-8-2-5-icomparable-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%EC%99%80-icomparer-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[C#] 8.2.5 IComparable 인터페이스와 IComparer 인터페이스 &amp;ndash; 언제나 휴일&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;IComarable 인터페이스와 IComparer 인터페이스는 개체의 값 비교를 제공하기 위해 정의되었습니다. C#의 컬렉션은 대부분 Sort 메서드를 제공하는데 IComparable 인터페이스 기반의 요소를 보관하고 있을&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;ehpub.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발/공부</category>
      <author>ssong_dev</author>
      <guid isPermaLink="true">https://songyeongkim.tistory.com/149</guid>
      <comments>https://songyeongkim.tistory.com/149#entry149comment</comments>
      <pubDate>Fri, 6 Jan 2023 19:03:00 +0900</pubDate>
    </item>
    <item>
      <title>Lazy&amp;lt;T&amp;gt;와 싱글턴</title>
      <link>https://songyeongkim.tistory.com/146</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://dev-nicitis.tistory.com/4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://dev-nicitis.tistory.com/4&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1672631380169&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;유니티 C# 싱글턴 패턴 + Lazy를 이용한 버전&quot; data-og-description=&quot;1. 싱글톤이란? 싱글톤(Singleton)은 게임 개발 시 가장 많이 사용되는 패턴 중 하나입니다. 우선 싱글턴이 무엇인지부터 알아봐야겠지요. 오직 한 개의 클래스 인스턴스만을 갖도록 보장하고, 이에&quot; data-og-host=&quot;dev-nicitis.tistory.com&quot; data-og-source-url=&quot;https://dev-nicitis.tistory.com/4&quot; data-og-url=&quot;https://dev-nicitis.tistory.com/4&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bmwOhd/hyQ80sWUCL/sW5eCVFJYeG6wawyLWY6J1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/lxxgF/hyQ82RPHMp/karEmxKgJSBAM8JijUk380/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://dev-nicitis.tistory.com/4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dev-nicitis.tistory.com/4&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bmwOhd/hyQ80sWUCL/sW5eCVFJYeG6wawyLWY6J1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/lxxgF/hyQ82RPHMp/karEmxKgJSBAM8JijUk380/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;유니티 C# 싱글턴 패턴 + Lazy를 이용한 버전&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1. 싱글톤이란? 싱글톤(Singleton)은 게임 개발 시 가장 많이 사용되는 패턴 중 하나입니다. 우선 싱글턴이 무엇인지부터 알아봐야겠지요. 오직 한 개의 클래스 인스턴스만을 갖도록 보장하고, 이에&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dev-nicitis.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>ssong_dev</author>
      <guid isPermaLink="true">https://songyeongkim.tistory.com/146</guid>
      <comments>https://songyeongkim.tistory.com/146#entry146comment</comments>
      <pubDate>Mon, 2 Jan 2023 12:49:45 +0900</pubDate>
    </item>
    <item>
      <title>[유니티] AssetImporter</title>
      <link>https://songyeongkim.tistory.com/145</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;amp;blogId=hammerimpact&amp;amp;logNo=220780963299&quot;&gt;https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;amp;blogId=hammerimpact&amp;amp;logNo=220780963299&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>ssong_dev</author>
      <guid isPermaLink="true">https://songyeongkim.tistory.com/145</guid>
      <comments>https://songyeongkim.tistory.com/145#entry145comment</comments>
      <pubDate>Thu, 29 Dec 2022 19:43:49 +0900</pubDate>
    </item>
    <item>
      <title>CCD 와 Fabrik</title>
      <link>https://songyeongkim.tistory.com/144</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://award09130.tistory.com/11&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://award09130.tistory.com/11&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1672303568851&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;IK Solvers&quot; data-og-description=&quot;이전 포스트에서는 IK에 대해 간단하게 소개했고, 이번 포스트는 IK Solver에 대해 소개한다. 여러 IK Solvers 들이 있지만, Unreal Engine 4에서 제공되고 있는 IK Solver 위주로 찾아봤다. 1. Analytic Solver (Two-&quot; data-og-host=&quot;award09130.tistory.com&quot; data-og-source-url=&quot;https://award09130.tistory.com/11&quot; data-og-url=&quot;https://award09130.tistory.com/11&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bQ277m/hyQ5tbkzbU/fBOsXhLliKcveJNWSyC2q1/img.png?width=800&amp;amp;height=465&amp;amp;face=0_0_800_465,https://scrap.kakaocdn.net/dn/I53wF/hyQ31gscFH/WpXZG7xgKnjGEAomRynsO0/img.png?width=800&amp;amp;height=465&amp;amp;face=0_0_800_465,https://scrap.kakaocdn.net/dn/vsHh2/hyQ5G2PsoL/09vdKNrO5CLsH7wBHcYw0k/img.png?width=747&amp;amp;height=768&amp;amp;face=0_0_747_768&quot;&gt;&lt;a href=&quot;https://award09130.tistory.com/11&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://award09130.tistory.com/11&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bQ277m/hyQ5tbkzbU/fBOsXhLliKcveJNWSyC2q1/img.png?width=800&amp;amp;height=465&amp;amp;face=0_0_800_465,https://scrap.kakaocdn.net/dn/I53wF/hyQ31gscFH/WpXZG7xgKnjGEAomRynsO0/img.png?width=800&amp;amp;height=465&amp;amp;face=0_0_800_465,https://scrap.kakaocdn.net/dn/vsHh2/hyQ5G2PsoL/09vdKNrO5CLsH7wBHcYw0k/img.png?width=747&amp;amp;height=768&amp;amp;face=0_0_747_768');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;IK Solvers&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이전 포스트에서는 IK에 대해 간단하게 소개했고, 이번 포스트는 IK Solver에 대해 소개한다. 여러 IK Solvers 들이 있지만, Unreal Engine 4에서 제공되고 있는 IK Solver 위주로 찾아봤다. 1. Analytic Solver (Two-&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;award09130.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>ssong_dev</author>
      <guid isPermaLink="true">https://songyeongkim.tistory.com/144</guid>
      <comments>https://songyeongkim.tistory.com/144#entry144comment</comments>
      <pubDate>Thu, 29 Dec 2022 17:46:10 +0900</pubDate>
    </item>
    <item>
      <title>[유니티] Spine-Unity</title>
      <link>https://songyeongkim.tistory.com/143</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://ko.esotericsoftware.com/spine-unity&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://ko.esotericsoftware.com/spine-unity&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1672035619296&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;spine-unity Runtime Documentation&quot; data-og-description=&quot;&quot; data-og-host=&quot;ko.esotericsoftware.com&quot; data-og-source-url=&quot;http://ko.esotericsoftware.com/spine-unity&quot; data-og-url=&quot;http://ko.esotericsoftware.com/spine-unity&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bdIEe0/hyQ1dgrqvU/zJC5soDhkYBOsKamJSMJvK/img.png?width=306&amp;amp;height=276&amp;amp;face=0_0_306_276&quot;&gt;&lt;a href=&quot;http://ko.esotericsoftware.com/spine-unity&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;http://ko.esotericsoftware.com/spine-unity&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bdIEe0/hyQ1dgrqvU/zJC5soDhkYBOsKamJSMJvK/img.png?width=306&amp;amp;height=276&amp;amp;face=0_0_306_276');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;spine-unity Runtime Documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;ko.esotericsoftware.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=DxDZtTK2nlE&quot;&gt;https://www.youtube.com/watch?v=DxDZtTK2nlE&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=DxDZtTK2nlE&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/bicsA4/hyQ1lyKy7D/wnBidPhfcKcDzeHuLqsI9K/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/DxDZtTK2nlE&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2D 애니메이션을 스파인을 이용해서 제작해본다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 id=&quot;%EC%84%B1%EB%8A%A5&quot;&gt;&lt;a href=&quot;http://ko.esotericsoftware.com/spine-clipping#%EC%84%B1%EB%8A%A5&quot;&gt;성능(클리핑)&lt;/a&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spine 런타임에서 클리핑은 CPU를 사용하여 구현되며, 특히 많은 정점이 있는 메쉬 어태치먼트를 사용하는 경우 매우 많은 비용이 드는 작업이 될 수 있습니다. 타깃 플랫폼에서 클리핑을 사용하는 애니메이션의 성능을 항상 확인하십시오.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클리핑을 위한 CPU 사용을 최소화하려면 클리핑 어태치먼트의 정점 수와 클리핑된 모든 영역 및 메쉬 어태치먼트의 정점 총수를 모두 줄이십시오. 시작 및 끝 슬롯을 설정하여 가장 적은 수의 어태치먼트를 클리핑한 다음 해당 어태치먼트를 편집하여 각 어태치먼트의 정점 수를 최대한 줄이십시오. 클리핑 다각형의 크기는 성능에 영향을 미치지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 클리핑 어태치먼트의 정점을 볼록하게 배열하면 클리핑을 하는 데 필요한 CPU 사용을 크게 줄일 수 있습니다. 이는 클리핑 어태치먼트의 정점이 먼저 볼록 다각형으로 구성이 해제된 다음, 결과로 생성되는 각 다각형이 클리핑된 모든 영역 및 메쉬 어태치먼트 정점과 대조되기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클리핑 어태치먼트 성능은 이미지나 동영상을 내보낼 때가 아니라 Spine 런타임을 사용할 때만 문제가 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제약조건&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FK / IK&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각 Forward Kinematics / Inverse Kinematics이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FK는 상위가 움직이면 하위가 따라 움직이는 것이고 IK는 하위가 움직이면 상위가 그것에 맞춰 움직이게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;손이나 발을 동작할 때에 팔/다리가 움직이면 FK의 경우 손, 발의 위치도 계속 바뀌게 되기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;손/발 위치에 따라 팔/다리를 움직이게 하기 위해 IK를 사용하게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반대로 팔을 휘저으며 걸을 때에는 손이 팔 위치를 따라 움직이게 되므로 FK를 사용하는 것이 좋은 등,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 방법이 효율적인지를 고려하며 작업해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FK/IK는 믹스해서 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>ssong_dev</author>
      <guid isPermaLink="true">https://songyeongkim.tistory.com/143</guid>
      <comments>https://songyeongkim.tistory.com/143#entry143comment</comments>
      <pubDate>Mon, 26 Dec 2022 19:31:41 +0900</pubDate>
    </item>
    <item>
      <title>Texture</title>
      <link>https://songyeongkim.tistory.com/142</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://vfxdoc.readthedocs.io/en/latest/textures/sampling/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://vfxdoc.readthedocs.io/en/latest/textures/sampling/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발/공부</category>
      <author>ssong_dev</author>
      <guid isPermaLink="true">https://songyeongkim.tistory.com/142</guid>
      <comments>https://songyeongkim.tistory.com/142#entry142comment</comments>
      <pubDate>Fri, 16 Dec 2022 15:35:49 +0900</pubDate>
    </item>
    <item>
      <title>[유니티] 최적화 관련 자료</title>
      <link>https://songyeongkim.tistory.com/141</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://lolmovies.tistory.com/12&quot;&gt;CPU와 GPU, 렌더링 초간단 학습 &amp;mdash; 코딩 조아 (tistory.com)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1670857967473&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;CPU와 GPU, 렌더링 초간단 학습&quot; data-og-description=&quot;CPU (Central Processing Unit, 중앙 처리 장치) : 화면에 그려야할 대상과 대상을 그릴 방법 결정 GPU (Graphics Processing Unit, 그래픽 처리 장치) : CPU의 지시를 받아 화면을 그림 [렌더링 파이프라인] . 씬 안&quot; data-og-host=&quot;lolmovies.tistory.com&quot; data-og-source-url=&quot;https://lolmovies.tistory.com/12&quot; data-og-url=&quot;https://lolmovies.tistory.com/12&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/2uQuD/hyQROU8map/ATNXy21cMj5qhAx9qb80iK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/fj1Nl/hyQRIUVG2j/RKYo9eWple3gzq9jevLBvk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://lolmovies.tistory.com/12&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://lolmovies.tistory.com/12&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/2uQuD/hyQROU8map/ATNXy21cMj5qhAx9qb80iK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/fj1Nl/hyQRIUVG2j/RKYo9eWple3gzq9jevLBvk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;CPU와 GPU, 렌더링 초간단 학습&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;CPU (Central Processing Unit, 중앙 처리 장치) : 화면에 그려야할 대상과 대상을 그릴 방법 결정 GPU (Graphics Processing Unit, 그래픽 처리 장치) : CPU의 지시를 받아 화면을 그림 [렌더링 파이프라인] . 씬 안&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;lolmovies.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://blog.unity.com/kr/technology/detecting-performance-bottlenecks-with-unity-frame-timing-manager&quot;&gt;Unity Frame Timing Manager로 성능 병목 현상 감지 | Unity Blog&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1670858094779&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Unity Frame Timing Manager로 성능 병목 현상 감지 | Unity Blog&quot; data-og-description=&quot;Frame Timing Manager에서 제공된 데이터를 사용해 병목 현상을 감지할 수 있습니다. 가장 단순한 배리언트에서는 메인 스레드 CPU, 렌더 스레드 CPU, Present 대기, GPU 시간을 비교하여 프레임 속도 제한&quot; data-og-host=&quot;blog.unity.com&quot; data-og-source-url=&quot;https://blog.unity.com/kr/technology/detecting-performance-bottlenecks-with-unity-frame-timing-manager&quot; data-og-url=&quot;https://blog.unity.com/kr/technology/detecting-performance-bottlenecks-with-unity-frame-timing-manager&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dCJR4L/hyQRH2PDUN/QVKhLB4XaepmOi0Zgs8tG1/img.jpg?width=1200&amp;amp;height=675&amp;amp;face=0_0_1200_675,https://scrap.kakaocdn.net/dn/bv6Tfa/hyQRWMryAa/YC7qLc0MgYgDI3BXXP1CQ1/img.png?width=1024&amp;amp;height=768&amp;amp;face=0_0_1024_768,https://scrap.kakaocdn.net/dn/6gDOr/hyQRNBTISN/CM3HjMuHVsf1tkUj2mO721/img.png?width=1024&amp;amp;height=768&amp;amp;face=0_0_1024_768&quot;&gt;&lt;a href=&quot;https://blog.unity.com/kr/technology/detecting-performance-bottlenecks-with-unity-frame-timing-manager&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://blog.unity.com/kr/technology/detecting-performance-bottlenecks-with-unity-frame-timing-manager&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dCJR4L/hyQRH2PDUN/QVKhLB4XaepmOi0Zgs8tG1/img.jpg?width=1200&amp;amp;height=675&amp;amp;face=0_0_1200_675,https://scrap.kakaocdn.net/dn/bv6Tfa/hyQRWMryAa/YC7qLc0MgYgDI3BXXP1CQ1/img.png?width=1024&amp;amp;height=768&amp;amp;face=0_0_1024_768,https://scrap.kakaocdn.net/dn/6gDOr/hyQRNBTISN/CM3HjMuHVsf1tkUj2mO721/img.png?width=1024&amp;amp;height=768&amp;amp;face=0_0_1024_768');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Unity Frame Timing Manager로 성능 병목 현상 감지 | Unity Blog&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Frame Timing Manager에서 제공된 데이터를 사용해 병목 현상을 감지할 수 있습니다. 가장 단순한 배리언트에서는 메인 스레드 CPU, 렌더 스레드 CPU, Present 대기, GPU 시간을 비교하여 프레임 속도 제한&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.unity.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://blog.unity.com/technology/optimize-your-mobile-game-performance-tips-on-profiling-memory-and-code-architecture&quot;&gt;Optimize your mobile game performance: Tips on profiling, memory, and code architecture from Unity&amp;rsquo;s top engineers | Unity Blog&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1670858176984&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Optimize your mobile game performance: Tips on profiling, memory, and code architecture from Unity&amp;rsquo;s top engineers | Unity Blo&quot; data-og-description=&quot;When profiling your game, we recommend that you cover both spikes and the cost of an average frame in your game. Understanding and optimizing expensive operations that occur in each frame can be more useful for applications running below the target frame r&quot; data-og-host=&quot;blog.unity.com&quot; data-og-source-url=&quot;https://blog.unity.com/technology/optimize-your-mobile-game-performance-tips-on-profiling-memory-and-code-architecture&quot; data-og-url=&quot;https://blog.unity.com/technology/optimize-your-mobile-game-performance-tips-on-profiling-memory-and-code-architecture&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/wvWA8/hyQRJzx9CC/Ryjzbw4Yy9ExwFS7UusyKK/img.jpg?width=1200&amp;amp;height=675&amp;amp;face=0_0_1200_675&quot;&gt;&lt;a href=&quot;https://blog.unity.com/technology/optimize-your-mobile-game-performance-tips-on-profiling-memory-and-code-architecture&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://blog.unity.com/technology/optimize-your-mobile-game-performance-tips-on-profiling-memory-and-code-architecture&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/wvWA8/hyQRJzx9CC/Ryjzbw4Yy9ExwFS7UusyKK/img.jpg?width=1200&amp;amp;height=675&amp;amp;face=0_0_1200_675');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Optimize your mobile game performance: Tips on profiling, memory, and code architecture from Unity&amp;rsquo;s top engineers | Unity Blo&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;When profiling your game, we recommend that you cover both spikes and the cost of an average frame in your game. Understanding and optimizing expensive operations that occur in each frame can be more useful for applications running below the target frame r&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.unity.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;If you see the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Gfx.WaitForCommands&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;marker, it means that the render thread is ready, but you might be waiting for a bottleneck on the main thread.&lt;/li&gt;
&lt;li&gt;If you frequently encounter&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Gfx.WaitForPresent&lt;/b&gt;, it means that the main thread was ready but was waiting for the GPU to present the frame.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://darkcatgame.tistory.com/139&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://darkcatgame.tistory.com/139&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1671005846875&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;URP 드로우콜 최적화 이론 정리&quot; data-og-description=&quot;Draw Call(드로우콜)이란? GPU에게 오브젝트를 화면에 그리라고 명령하는 것 입니다. 드로우콜을 줄여야(최적화)해야하는 이유? GPU가 오브젝트를 화면에 그리는데 시간이 필요한데, 한 프레임에 그&quot; data-og-host=&quot;darkcatgame.tistory.com&quot; data-og-source-url=&quot;https://darkcatgame.tistory.com/139&quot; data-og-url=&quot;https://darkcatgame.tistory.com/139&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/mwBKp/hyQTNIjjzH/Dyl8lDZowqUoxEOq4yHo0K/img.png?width=482&amp;amp;height=355&amp;amp;face=0_0_482_355,https://scrap.kakaocdn.net/dn/PBMIh/hyQTKkpr6N/pEsSEKpZi89SLxF56BOgrk/img.png?width=482&amp;amp;height=355&amp;amp;face=0_0_482_355,https://scrap.kakaocdn.net/dn/yFAr9/hyQTKkpr7D/ZQs1rsxwPIs2kzyYkhfbSk/img.png?width=792&amp;amp;height=350&amp;amp;face=0_0_792_350&quot;&gt;&lt;a href=&quot;https://darkcatgame.tistory.com/139&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://darkcatgame.tistory.com/139&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/mwBKp/hyQTNIjjzH/Dyl8lDZowqUoxEOq4yHo0K/img.png?width=482&amp;amp;height=355&amp;amp;face=0_0_482_355,https://scrap.kakaocdn.net/dn/PBMIh/hyQTKkpr6N/pEsSEKpZi89SLxF56BOgrk/img.png?width=482&amp;amp;height=355&amp;amp;face=0_0_482_355,https://scrap.kakaocdn.net/dn/yFAr9/hyQTKkpr7D/ZQs1rsxwPIs2kzyYkhfbSk/img.png?width=792&amp;amp;height=350&amp;amp;face=0_0_792_350');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;URP 드로우콜 최적화 이론 정리&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Draw Call(드로우콜)이란? GPU에게 오브젝트를 화면에 그리라고 명령하는 것 입니다. 드로우콜을 줄여야(최적화)해야하는 이유? GPU가 오브젝트를 화면에 그리는데 시간이 필요한데, 한 프레임에 그&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;darkcatgame.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>ssong_dev</author>
      <guid isPermaLink="true">https://songyeongkim.tistory.com/141</guid>
      <comments>https://songyeongkim.tistory.com/141#entry141comment</comments>
      <pubDate>Tue, 13 Dec 2022 00:18:17 +0900</pubDate>
    </item>
  </channel>
</rss>