<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>다소니닷넷</title>
    <link>https://dasony-lib.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Fri, 10 Apr 2026 08:49:47 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>다소니닷넷</managingEditor>
    <image>
      <title>다소니닷넷</title>
      <url>https://tistory1.daumcdn.net/tistory/2972353/attach/103af9b7cbef4721b91eb58a2c653623</url>
      <link>https://dasony-lib.tistory.com</link>
    </image>
    <item>
      <title>[사용기] 필터 교체형 KF94 마스크 &amp;quot;AEGIS 마스크&amp;quot;</title>
      <link>https://dasony-lib.tistory.com/29</link>
      <description>&lt;p&gt;요즘 마스크 구하기가 하늘의 별따기네요.&lt;/p&gt;
&lt;p&gt;필자가 금번에 인터넷을 통해 구매한 마스크도 약 3주를 기다려 도착했어요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;KakaoTalk_20200312_200631016.jpg&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ndyTg/btqCDjQNZno/dhxsOH4676gsbpjXtfh7v1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ndyTg/btqCDjQNZno/dhxsOH4676gsbpjXtfh7v1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ndyTg/btqCDjQNZno/dhxsOH4676gsbpjXtfh7v1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FndyTg%2FbtqCDjQNZno%2FdhxsOH4676gsbpjXtfh7v1%2Fimg.jpg&quot; data-filename=&quot;KakaoTalk_20200312_200631016.jpg&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;소개할 마스크는 &quot;AEGIS 마스크&quot; 입니다.&lt;/p&gt;
&lt;p&gt;제품을 알아보니 산업용 분진마스크도 제작하는 회사 같아요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;KakaoTalk_20200312_200630707.jpg&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0n3bV/btqCFyfgZWR/wKV5HRR6ty70RpFpzrgRf0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0n3bV/btqCFyfgZWR/wKV5HRR6ty70RpFpzrgRf0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0n3bV/btqCFyfgZWR/wKV5HRR6ty70RpFpzrgRf0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0n3bV%2FbtqCFyfgZWR%2FwKV5HRR6ty70RpFpzrgRf0%2Fimg.jpg&quot; data-filename=&quot;KakaoTalk_20200312_200630707.jpg&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;제품 구성은 사용 설명서, 필터가 장착된 마스크, 여분의 교체 필터 1개 입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;KakaoTalk_20200312_200630101.jpg&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpvVE9/btqCDlnrPpF/uYhdhMMk11hL3vTGgqXTV0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpvVE9/btqCDlnrPpF/uYhdhMMk11hL3vTGgqXTV0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpvVE9/btqCDlnrPpF/uYhdhMMk11hL3vTGgqXTV0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpvVE9%2FbtqCDlnrPpF%2FuYhdhMMk11hL3vTGgqXTV0%2Fimg.jpg&quot; data-filename=&quot;KakaoTalk_20200312_200630101.jpg&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;마스크 안쪽에 필터가 장착되어 있습니다.&lt;/p&gt;
&lt;p&gt;필터는 실리콘 패드안에 넣어서 사용하는 방식입니다.&lt;/p&gt;
&lt;p&gt;실리콘 패드는 코와 입 주변에 밀착되도록 만들어져 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;KakaoTalk_20200312_200629345.jpg&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FA8dn/btqCBxhyJzx/qMt5PioLtydmzFLwLaCgR1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FA8dn/btqCBxhyJzx/qMt5PioLtydmzFLwLaCgR1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FA8dn/btqCBxhyJzx/qMt5PioLtydmzFLwLaCgR1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFA8dn%2FbtqCBxhyJzx%2FqMt5PioLtydmzFLwLaCgR1%2Fimg.jpg&quot; data-filename=&quot;KakaoTalk_20200312_200629345.jpg&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;실리콘 패드는 마스크에 탈부착 가능합니다.&lt;/p&gt;
&lt;p&gt;실리콘 패드의 바깥쪽 중앙에는 마스크에 부착하기 위한 부직포가 있습니다.&lt;/p&gt;
&lt;p&gt;아마 비슷한 재질의 다른 마스크에 실리콘 패드를 부착해서 사용 할 수 있지 않을까요?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;KakaoTalk_20200312_200628688.jpg&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yP65t/btqCB9ni2WD/aSkGMBiKzGagk039Vqjfh1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yP65t/btqCB9ni2WD/aSkGMBiKzGagk039Vqjfh1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yP65t/btqCB9ni2WD/aSkGMBiKzGagk039Vqjfh1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyP65t%2FbtqCB9ni2WD%2FaSkGMBiKzGagk039Vqjfh1%2Fimg.jpg&quot; data-filename=&quot;KakaoTalk_20200312_200628688.jpg&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;실리콘 패드와 필터를 분리해보았습니다.&lt;/p&gt;
&lt;p&gt;필터 장착과 분리는 어렵지 않지만, 장착시 필터를 손으로 많이 만지게 되는 단점이 있네요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;KakaoTalk_20200312_200630330.jpg&quot; data-origin-width=&quot;2320&quot; data-origin-height=&quot;2320&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/enx45x/btqCIDtejGM/rfEoosdwpjvdrfSkn9bmvK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/enx45x/btqCIDtejGM/rfEoosdwpjvdrfSkn9bmvK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/enx45x/btqCIDtejGM/rfEoosdwpjvdrfSkn9bmvK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fenx45x%2FbtqCIDtejGM%2FrfEoosdwpjvdrfSkn9bmvK%2Fimg.jpg&quot; data-filename=&quot;KakaoTalk_20200312_200630330.jpg&quot; data-origin-width=&quot;2320&quot; data-origin-height=&quot;2320&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;직접 착용해보았습니다.&lt;/p&gt;
&lt;p&gt;별로 자랑하고 싶은 얼굴은 아니라서 모자이크를 조금 했습니다;;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;마스크를 썼을 때 생각보다 많이 돌출되지 않아서 마음에 들었습니다.&lt;/p&gt;
&lt;p&gt;너무 돌출되면 왠지 쓰고 다니기 부끄러웠는데, 그런 걱정은 안해도 될 것 같아요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;제 리뷰는 여기까지~&lt;/p&gt;
&lt;p&gt;위생 에티켓 잘 지켜서 코로나19 함께 이겨냅시다!!&lt;/p&gt;</description>
      <category>Life Style</category>
      <category>KF94</category>
      <category>교체형</category>
      <category>마스크</category>
      <category>코로나19</category>
      <category>필터</category>
      <author>다소니닷넷</author>
      <guid isPermaLink="true">https://dasony-lib.tistory.com/29</guid>
      <comments>https://dasony-lib.tistory.com/29#entry29comment</comments>
      <pubDate>Thu, 12 Mar 2020 22:13:56 +0900</pubDate>
    </item>
    <item>
      <title>[Unity,C#] 2D 비행 슈팅 조작 스크립트 작성 (마우스 입력)</title>
      <link>https://dasony-lib.tistory.com/28</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 개요&lt;/h2&gt;
&lt;p&gt;비행슈팅 조작법을 터치에서 마우스로 변경한 코드입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 코드&lt;/h2&gt;
&lt;pre id=&quot;code_1583889558096&quot; class=&quot;java&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerControl : MonoBehavior
{
	public float moveSpeed = 2f; 	// 비행기의 이동 속도
    
    private Rigidbody2D rigid2D; 	// 비행기의 강체(Rigidbody)
    private bool isFar = false;		// 터치와 비행기의 거리 체크
    private Vector3 inputPosition;	// 터치의 월드 포지션
    private Vector2 moveDir; 		// 화면 터치 시 비행기 이동 방향
    
    void Start () 
    {
    	rigid2D = GetComponent&amp;lt;Rigidbody2D&amp;gt;();
    }
    
    void Update ()
    {
    	if(rigid2D == null)	// 강체가 없거나 터치가 없으면 리턴
        	return;
        
        moveDir = Vector2.zero; // 방향 초기화
        
        if(Input.GetMouseButtonDown(0))
        {
        	inputPosition = GetInputPosition(Input.mousePosition);
            
            if (Vector3.Distance(transform.position, inputPosition) &amp;gt; .2f)
            {
            	isFar = true; // 비행기와 터치 사이의 거리가 먼 상태
            }
        }
        
        if(Input.GetMouseButtonUp(0))
        {
        	isFar = false;
        }
        
        if(Input.GetMouseButton(0))
        {
        	inputPosition = GetInputPosition(Input.mousePosition);
            
            if (isFar) // 거리가 먼 상태
            {
            	moveDir = GetDirection(transform.position, inputPosition);
                
                // 터치와 비행기 거리를 체크
                isFar = (Vector3.Distance(transform.position, inputPosition) &amp;gt; .2f);
            }
            else // 터치에 가까운 상태
            {
            	transform.position = inputPosition;
            }
        }
        
        rigid2D.velocity = moveDir * moveSpeed; // 방향에 속도를 곱해서 강체에 적용
    }
    
    // 터치의 스크린 포지션을 월드 포지션으로 변경
    public Vector3 GetInputPosition(Vector3 position)
    {
    	Vector3 screenPosition = position + (Vector3.back * Camera.main.transform.position.z);
        return Camera.main.ScreenToWorldPoint(screenPosition);
    }
    
    // 두 포지션 사이의 방향 
    public Vector2 GetDirection (Vector2 from, Vector2 to)
    {
        Vector2 delta = to - from;
        float radian = Mathf.Atan2(delta.y, delta.x);

        return new Vector2(Mathf.Cos(radian), Mathf.Sin(radian));
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.dasony.net/27&quot;&gt;[Unity/C#] 2D 비행 슈팅 조작 스크립트 작성 (터치 입력)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1583890643063&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Unity/C#] 2D 비행 슈팅 조작 스크립트 작성 (터치 입력)&quot; data-og-description=&quot;1. 개요 모바일 비행 슈팅 게임 Sky Force 시리즈 게임에서 비행기를 조작할 때 터치한 위치로 비행기가 따라 다닙니다. 비행기에서 먼 곳을 터치하면 터치한 위치로 이동하기 위해 비행기가 움직이고, 비행기가..&quot; data-og-host=&quot;www.dasony.net&quot; data-og-source-url=&quot;https://www.dasony.net/27&quot; data-og-url=&quot;https://www.dasony.net/27&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/lxnlO/hyFeMgxpTI/S863fljD3OGKlxvfvWif3K/img.jpg?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/xGCzR/hyFeVdvOBN/lU42QvCiUsKAFqqcUbiSzk/img.jpg?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450&quot;&gt;&lt;a href=&quot;https://www.dasony.net/27&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.dasony.net/27&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/lxnlO/hyFeMgxpTI/S863fljD3OGKlxvfvWif3K/img.jpg?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/xGCzR/hyFeVdvOBN/lU42QvCiUsKAFqqcUbiSzk/img.jpg?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[Unity/C#] 2D 비행 슈팅 조작 스크립트 작성 (터치 입력)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;1. 개요 모바일 비행 슈팅 게임 Sky Force 시리즈 게임에서 비행기를 조작할 때 터치한 위치로 비행기가 따라 다닙니다. 비행기에서 먼 곳을 터치하면 터치한 위치로 이동하기 위해 비행기가 움직이고, 비행기가..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.dasony.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Develop/Tips</category>
      <category>Control</category>
      <category>csharp</category>
      <category>shmup</category>
      <category>SkyForce</category>
      <category>unity</category>
      <category>비행슈팅</category>
      <category>스카이포스</category>
      <category>스크립트</category>
      <category>조작</category>
      <author>다소니닷넷</author>
      <guid isPermaLink="true">https://dasony-lib.tistory.com/28</guid>
      <comments>https://dasony-lib.tistory.com/28#entry28comment</comments>
      <pubDate>Wed, 11 Mar 2020 10:43:31 +0900</pubDate>
    </item>
    <item>
      <title>[Unity,C#] 2D 비행 슈팅 조작 스크립트 작성 (터치 입력)</title>
      <link>https://dasony-lib.tistory.com/27</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 개요&lt;/h2&gt;
&lt;p&gt;모바일 비행 슈팅 게임 Sky Force 시리즈 게임에서 비행기를 조작할 때 터치한 위치로 비행기가 따라 다닙니다.&lt;/p&gt;
&lt;p&gt;비행기에서 먼 곳을 터치하면 터치한 위치로 이동하기 위해 비행기가 움직이고, 비행기가 터치 위치에 도달하면, 터치와 동일한 위치에서 따라 다닙니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;마우스로 조작을 원하시면 하단의 링크를 통해 마우스 입력 버전을 참고해주세요.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 코드&lt;/h2&gt;
&lt;pre id=&quot;code_1583889558096&quot; class=&quot;java&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerControl : MonoBehavior
{
	public float moveSpeed = 2f; 	// 비행기의 이동 속도
    
    private Rigidbody2D rigid2D; 	// 비행기의 강체(Rigidbody)
    private bool isFar = false;		// 터치와 비행기의 거리 체크
    private Vector3 inputPosition;	// 터치의 월드 포지션
    private Vector2 moveDir; 		// 화면 터치 시 비행기 이동 방향
    
    void Start () 
    {
    	rigid2D = GetComponent&amp;lt;Rigidbody2D&amp;gt;();
    }
    
    void Update ()
    {
    	if(rigid2D == null || Input.touchCount &amp;lt; 1)	// 강체가 없거나 터치가 없으면 리턴
        	return;
        
        moveDir = Vector2.zero; // 방향 초기화
        
        if(Input.GetTouch(0).phase == TouchPhase.Began)
        {
        	inputPosition = GetInputPosition(Input.GetTouch(0).position);
            
            if (Vector3.Distance(transform.position, inputPosition) &amp;gt; .2f)
            {
            	isFar = true; // 비행기와 터치 사이의 거리가 먼 상태
            }
        }
        
        if(Input.GetTouch(0).phase == TouchPhase.Ended)
        {
        	isFar = false;
        }
        
        if(Input.GetTouch(0).phase == TouchPhase.Moved)
        {
        	inputPosition = GetInputPosition(Input.GetTouch(0).position);
            
            if (isFar) // 거리가 먼 상태
            {
            	moveDir = GetDirection(transform.position, inputPosition);
                
                // 터치와 비행기 거리를 체크
                isFar = (Vector3.Distance(transform.position, inputPosition) &amp;gt; .2f);
            }
            else // 터치에 가까운 상태
            {
            	transform.position = inputPosition;
            }
        }
        
        rigid2D.velocity = moveDir * moveSpeed; // 방향에 속도를 곱해서 강체에 적용
    }
    
    // 터치의 스크린 포지션을 월드 포지션으로 변경
    public Vector3 GetInputPosition(Vector3 position)
    {
    	Vector3 screenPosition = position + (Vector3.back * Camera.main.transform.position.z);
        return Camera.main.ScreenToWorldPoint(screenPosition);
    }
    
    // 두 포지션 사이의 방향 
    public Vector2 GetDirection (Vector2 from, Vector2 to)
    {
        Vector2 delta = to - from;
        float radian = Mathf.Atan2(delta.y, delta.x);

        return new Vector2(Mathf.Cos(radian), Mathf.Sin(radian));
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 사용방법&lt;/h2&gt;
&lt;p&gt;- 움직이려는 물체(비행기)에 Rigidbody2D 컴포넌트가 포함되어 있어야합니다.&lt;/p&gt;
&lt;p&gt;- 비행기 속도는 터치와의 거리가 먼 상태에서 적용됩니다.&lt;/p&gt;
&lt;p&gt;- 에디터에서 테스트 하기 위해서는 터치 입력부분을 아래 마우스 입력 버전을 참고하세요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.dasony.net/28&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Unity,C#] 2D 비행 슈팅 조작 스크립트 작성 (마우스 입력)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1583891069079&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Unity,C#] 2D 비행 슈팅 조작 스크립트 작성 (마우스 입력)&quot; data-og-description=&quot;1. 개요 비행슈팅 조작법을 터치에서 마우스로 변경한 코드입니다. 2. 코드 using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerControl : MonoBehavior { publ..&quot; data-og-host=&quot;www.dasony.net&quot; data-og-source-url=&quot;https://www.dasony.net/28&quot; data-og-url=&quot;https://www.dasony.net/28&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bDweNe/hyFeUTcWlA/10FAuTUFoM4qJZY7gX6Uyk/img.jpg?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/B58qb/hyFeUez0IE/LKPFZbl3vmfWjJzB61Bg7K/img.jpg?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450&quot;&gt;&lt;a href=&quot;https://www.dasony.net/28&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.dasony.net/28&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bDweNe/hyFeUTcWlA/10FAuTUFoM4qJZY7gX6Uyk/img.jpg?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/B58qb/hyFeUez0IE/LKPFZbl3vmfWjJzB61Bg7K/img.jpg?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[Unity,C#] 2D 비행 슈팅 조작 스크립트 작성 (마우스 입력)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;1. 개요 비행슈팅 조작법을 터치에서 마우스로 변경한 코드입니다. 2. 코드 using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerControl : MonoBehavior { publ..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.dasony.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Develop/Tips</category>
      <category>Control</category>
      <category>csharp</category>
      <category>shmup</category>
      <category>SkyForce</category>
      <category>unity</category>
      <category>비행슈팅</category>
      <category>스카이포스</category>
      <category>스크립트</category>
      <category>조작</category>
      <author>다소니닷넷</author>
      <guid isPermaLink="true">https://dasony-lib.tistory.com/27</guid>
      <comments>https://dasony-lib.tistory.com/27#entry27comment</comments>
      <pubDate>Wed, 11 Mar 2020 10:27:26 +0900</pubDate>
    </item>
    <item>
      <title>[SWIFT] let 과 var의 차이</title>
      <link>https://dasony-lib.tistory.com/10</link>
      <description>&lt;p&gt;프로그래밍에서는 어떤 값(데이터)를 저장하고 불러오기 위해서 변수 혹은 상수를 선언합니다.&lt;/p&gt;
&lt;p&gt;프로그래밍 언어에서는 변수를 선언할 때 데이터 타입을 변수명 앞에 붙여 사용하고,&lt;/p&gt;
&lt;p&gt;상수를 선언할 때는 데이터 타입 앞에 const 라는 키워드를 추가하기도 합니다.&lt;/p&gt;
&lt;p&gt;물론 모든 언어가 같은 방법을 사용하지 않고 다양한 방법으로 변수 혹은 상수를 선언합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Swift에서는 변수와 상수를 선언하기 위해 let과 var이라는 키워드를 이용합니다.&lt;/p&gt;
&lt;p&gt;var은 변수를 선언 할 때, let은 상수를 선언 할 때 사용합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;사용방법은 아래와 같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1576402311250&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var 변수명: 데이터 타입
let 상수명: 데이터 타입&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;변수와 상수를 선언 할 때 값을 함께 할당 할 수도 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1576402324284&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var a: Int = 0
let b: String = &quot;상수&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;변수와 상수에 특징에 따라 변수인 var은 값을 변경할 수 있지만 상수인 let은 값을 변경할 수 없습니다.&lt;/p&gt;
&lt;p&gt;그렇기 때문에 var은 선언 할 때 값을 할당하지 않아도 변경이 가능하지만 let은 선언 할 때 값은 할당해야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1576402661375&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var a: Int = 0
a = 10 //문제 없음

let b: String = &quot;상수&quot;
b = &quot;변수&quot; //에러 발생&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Develop/Tips</category>
      <category>Let</category>
      <category>Swift</category>
      <category>var</category>
      <category>변수</category>
      <category>상수</category>
      <author>다소니닷넷</author>
      <guid isPermaLink="true">https://dasony-lib.tistory.com/10</guid>
      <comments>https://dasony-lib.tistory.com/10#entry10comment</comments>
      <pubDate>Sun, 15 Dec 2019 18:40:35 +0900</pubDate>
    </item>
    <item>
      <title>[GPGS] 구글 플레이 게임 서비스 유니티 플러그인 사용 시 실시간 갱신 문제</title>
      <link>https://dasony-lib.tistory.com/9</link>
      <description>&lt;h1&gt;개요&lt;/h1&gt;&lt;div&gt;안드로이드 게임을 개발하면서 구글에서 서비스되는 플레이 게임 서비스를 많이 이용합니다.&lt;/div&gt;&lt;div&gt;구글에서는 유니티에서도 쉽게 구글 플레이 게임 서비스(이하, GPGS)를 구현할 수 있도록 플러그인을 제공하고 있지요.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;게임에 GPGS를 이용하여 리더보드를 구현하여 실시간 랭킹 정보를 출력하는 기능을 구현하는 경우, 리더보드의 새로운 정보가 들어오지 않는 문제가 발생합니다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;이건 플러그인에서 네트워킹을 최소화하기 위해 데이터를 캐시하여 사용하기 때문인데요.&lt;/div&gt;&lt;div&gt;캐시데이터가 삭제되기 전까진 이미 저장된 데이터만 출력이 가능하게 되는 거죠.&lt;/div&gt;&lt;div&gt;글로벌 타겟으로 이용하는 리더보드라서 데이터량이 많을 수도 있기 때문이겠죠?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;이 문제를 해결하기 위해서는 플러그인의 코드를 조금 수정해야 합니다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h1&gt;해결방법&lt;/h1&gt;&lt;div&gt;플러그인을 프로젝트에 추가하면, 아래의 경로에 위치한 LeaderboardManager.cs 파일을 오픈하여 편집합니다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;div&gt;Path :&amp;nbsp;Project&amp;nbsp;Folder/Assets/GooglePlayGames/Platforms/Native/PInvoke/LeaderboardManager.cs&lt;/div&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;div&gt;위 파일을 오픈하면 LoadLeaderboardData (string leaderboardId, ...) 메서드를 찾을 수 있습니다.&lt;/div&gt;
&lt;div&gt;찾으셨다면 아래와 같이 수정하고 저장하시면 리더보드 정보를 호출 할 때마다 새로운 정보를 받아올 수 있습니다.&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;csharp&quot;&gt;public void LoadLeaderboardData(string leaderboardId,
        LeaderboardStart start,
        int rowCount,
        LeaderboardCollection collection,
        LeaderboardTimeSpan timeSpan,
        string playerId, Action&amp;lt;leaderboardscoredata&amp;gt; callback) {

    .
    .
    .

    C.LeaderboardManager_Fetch(mServices.AsHandle(),
               Types.DataSource.CACHE_OR_NETWORK, // 이 부분을 Types.DataSource.NETWORK_ONLY 으로 변경
                leaderboardId,
                InternalFetchCallback,
                Callbacks.ToIntPtr&amp;lt;fetchresponse&amp;gt;((rsp) =&amp;gt;
                    HandleFetch(token, rsp, playerId, rowCount, callback),
                    FetchResponse.FromPointer));
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Develop/Tips</category>
      <category>Game</category>
      <category>Google</category>
      <category>gpgs</category>
      <category>play</category>
      <category>services</category>
      <category>게임</category>
      <category>구글</category>
      <category>서비스</category>
      <category>유니티</category>
      <category>플레이</category>
      <author>다소니닷넷</author>
      <guid isPermaLink="true">https://dasony-lib.tistory.com/9</guid>
      <comments>https://dasony-lib.tistory.com/9#entry9comment</comments>
      <pubDate>Sun, 6 Jan 2019 01:31:57 +0900</pubDate>
    </item>
    <item>
      <title>[신규] 유니티용 로컬 알림 플러그인이 추가되었습니다.</title>
      <link>https://dasony-lib.tistory.com/notice/8</link>
      <description>&lt;p&gt;유니티용 로컬 알림 플러그인 1.0.0 버전이 신규로 등록되었습니다.&lt;/p&gt;&lt;p&gt;부족한 실력으로 만들었지만,&amp;nbsp;많은 도움이 되길 바랍니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://lib.dasony.net/7&quot; target=&quot;_top&quot; class=&quot;tx-link&quot;&gt;https://lib.dasony.net/7&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <author>다소니닷넷</author>
      <guid isPermaLink="true">https://dasony-lib.tistory.com/notice/8</guid>
      <pubDate>Sat, 5 Jan 2019 20:52:57 +0900</pubDate>
    </item>
    <item>
      <title>[NATIVE, ANDROID] Local Notification(로컬 알림) 유니티 플러그인</title>
      <link>https://dasony-lib.tistory.com/7</link>
      <description>&lt;h1&gt;개요&lt;/h1&gt;&lt;div&gt;유니티에서 네이티브 알림 기능을 iOS 만 제공하고 있습니다.&lt;/div&gt;&lt;div&gt;안드로이드에서 로컬 알림을 이용하려면 플러그인을 직접 제작하거나 다른 사람이 만들어 둔 플러그인을 사용해야 합니다.&lt;/div&gt;&lt;div&gt;이번에 다소니닷넷에서도 로컬 알림을 사용하게 되어 직접 제작을 하였습니다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h1&gt;유니티 플러그인&lt;/h1&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block;   height: auto; max-width: 100%;&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/99ABFF465C3098B131&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://i1.daumcdn.net/cfs.tistory/v/0/blog/image/extension/unknown.gif&quot; style=&quot;vertical-align: middle;&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;/&gt;notify-1.0.0.unitypackage&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h1&gt;사용방법&lt;/h1&gt;&lt;h2&gt;1. 알림 아이콘 적용&lt;/h2&gt;&lt;div&gt;안드로이드의 최신 버전에서는&amp;nbsp;작은 크기의 알림 아이콘과 큰 크기의 알림 아이콘 이렇게 두가지를 사용하고 있는데요.&lt;/div&gt;&lt;div&gt;그 중 작은 크기의 알림 아이콘은&amp;nbsp;필수 아이콘으로 꼭 적용해야합니다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;아이콘 적용 방법은 간단합니다.&lt;/div&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;Project Folder/Assets/Plugins/Android/DasonyNotification/res/drawable/&lt;/p&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;위 경로에 아이콘 이미지를 추가하신 후 메소드 호출 시 아이콘 이름만 입력하시면 알림에 적용됩니다.&lt;/div&gt;&lt;div&gt;안드로이드 이미지는 drawable 폴더의 이름에 따라 해상도(dpi)&amp;nbsp;별로 호출이 가능한건 알고 계시죠? 같은 방법으로 이미지를 추가하시면 됩니다.&lt;/div&gt;&lt;div&gt;해상도(dpi) 폴더와 예제 아이콘이&amp;nbsp;플러그인에 포함되어 있으므로 이미지 추가 혹은 교체 후 사용하시면됩니다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h4&gt;1-1&amp;nbsp;해상도(dpi)&amp;nbsp;별 drawable 폴더명&lt;/h4&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;drawable&lt;/p&gt;&lt;p&gt;drawable-ldpi&lt;/p&gt;&lt;p&gt;drawable-mdpi&lt;/p&gt;&lt;p&gt;drawable-hdpi&lt;/p&gt;&lt;p&gt;drawable-xhdpi&lt;/p&gt;&lt;p&gt;drawable-xxhdpi&lt;/p&gt;&lt;p&gt;drawable-xxxhdpi&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;2. 로컬&amp;nbsp;알림 설정&lt;/h2&gt;&lt;div&gt;로컬 알림을 사용할 스크립트 상단에 플러그인의 클래스를 사용할 수 있도록 아래와 같이 선언합니다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre&gt;&lt;code class=&quot;csharp&quot;&gt;using Dasony.Libs;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;2-1 초기화&lt;/h3&gt;&lt;div&gt;로컬 알림 플러그인은 싱글톤으로 제작되어 LocalNotification 클래스의 Instance 속성을 호출하면 자동으로 초기화됩니다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;pre&gt;&lt;code class=&quot;csharp&quot;&gt;public class Test : MonoBehaviour {
    LocalNotification notification;

    void Start () {
        notification = LocalNotification.Instance;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;2-2 &amp;nbsp;알림 보내기&lt;/h3&gt;&lt;div&gt;NotificationData.Builder 클래스를 이용하여 알림을 생성합니다.&lt;/div&gt;&lt;div&gt;알림을 생성할 때 SetDelay를 이용해 지연시간을 넣어주면 스케쥴 알림으로 적용됩니다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;pre&gt;&lt;code class=&quot;csharp&quot;&gt;public class Test : MonoBehaviour {

    ...

    void SendNotification () {
        NotificationData.Builder builder = new Notification.Builder(1) // 정수형 알림 id
            .SetSmallIcon (&quot;notify_icon&quot;) // 위에서 추가한 아이콘의 이름
            .SetContentTitle(&quot;제목 입력&quot;)
            .SetContentText(&quot;본문 입력&quot;)
            .SetAutoCancel(true)
            .SetDelay(30000); // 30초 후에 알림 옴, 단위는 밀리초

        notification.SetLocalNotification(builder.Build()); // 알림을 보냅니다.
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;2-3 알림 취소 (스케쥴 알림 이용 시)&lt;/h3&gt;&lt;div&gt;스케쥴 알림(지연시간 추가)&amp;nbsp;을 등록 후 알림이 수신되기 전에 알림을 취소할 수 있습니다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;# 1개의 알림 취소&lt;/b&gt;&lt;/div&gt;
&lt;pre&gt;&lt;code class=&quot;csharp&quot;&gt;notification.CancelScheduleNotification(1); // 알림 생성 시 입력했던 정수형 알림 id&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;# 모든 알림 취소&lt;/b&gt;&lt;/div&gt;
&lt;pre&gt;&lt;code class=&quot;csharp&quot;&gt;notification.CancelAllScheduleNotification();&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;2-4 수신된 모든 알림 없애기&lt;/h3&gt;
&lt;div&gt;이미 수신된 알림을 없애지 않으면 앱 아이콘에 뱃지(숫자 표시)가 없어지지 않을 수 있습니다.&lt;/div&gt;
&lt;div&gt;이때 알림을 없애는 메서드를 호출하면 됩니다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;pre&gt;&lt;code class=&quot;csharp&quot;&gt;notification.ClearAllLocalNotifications();&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;3. 레퍼런스&lt;/h2&gt;&lt;h3&gt;Notification (Dasony.Libs.Notification)&lt;/h3&gt;&lt;div&gt;알림을 설정하거나 취소, 제거 등을 실행해주는 클래스입니다.&lt;/div&gt;&lt;div&gt;싱글톤으로 제작되었으며, Instance 속성을 호출하면 생성자가 자동으로 초기화됩니다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3&gt;정리&lt;/h3&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;#&amp;nbsp;&lt;/b&gt;&lt;b&gt;Public&lt;/b&gt;&lt;b&gt;&amp;nbsp;생성자&lt;/b&gt;&lt;/div&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;b&gt;Notification ()&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;사용자가 직접 생성자를 호출&amp;nbsp;할 수 없습니다.&lt;/p&gt;&lt;p&gt;Notification.Instance 를 이용하여 메서드를 호출해야 합니다.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;# Public 메서드&lt;/b&gt;&lt;/div&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;b&gt;TestNotification(long delay)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;알림이 정상 동작하는지 테스트 할 때 호출하기 위한 용도입니다&amp;nbsp;.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;제목 : Test&lt;/p&gt;&lt;p&gt;내용 : Test Notification!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;위의 내용으로 알림이 설정됩니다.&lt;/p&gt;&lt;p&gt;delay 값을 입력하면 스케쥴 알림으로 설정됩니다.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;b&gt;SetLocalNotification&amp;nbsp;(NotificationData data)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;NotificationData로 생성된 알림 데이터를 이용하여 로컬&amp;nbsp;알림을 설정합니다.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;b&gt;CancelScheduleNotification&amp;nbsp;(int id)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;스케쥴 알림으로 설정된 알림을 취소 처리합니다.&lt;/p&gt;&lt;p&gt;id는 NotificationData를 생성할 때 입력한 id를 사용합니다.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;h3&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot; style=&quot;font-size: 13px; font-weight: normal;&quot;&gt;&lt;p&gt;&lt;b&gt;CancelAllScheduleNotifications&amp;nbsp;()&lt;/b&gt;&lt;/p&gt;&lt;p&gt;스케쥴 알림으로 설정된 모든 알림을 취소 처리합니다.&lt;/p&gt;&lt;/blockquote&gt;&lt;/h3&gt;&lt;h3&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot; style=&quot;font-size: 13px; font-weight: normal;&quot;&gt;&lt;p&gt;&lt;b&gt;ClearAllLocalNotifications ()&lt;/b&gt;&lt;/p&gt;&lt;p&gt;호출 처리된 모든 알림을 제거합니다.&lt;/p&gt;&lt;p&gt;이때 앱 아이콘에 노출된 배지도 함께 제거됩니다.&lt;/p&gt;&lt;/blockquote&gt;&lt;/h3&gt;&lt;h3&gt;&lt;br /&gt;&lt;/h3&gt;&lt;h3&gt;NotificationData.Builder (Dasony.Libs.NotificationData.Builder)&lt;/h3&gt;&lt;div&gt;알림을 생성시킬 때 사용할 수 있는 속성들을 정의해주는 보조 클래스입니다.&lt;/div&gt;&lt;div&gt;NotificationData 클래스는 독립적으로 생성할 경우 기본 속성으로 생성되며, 속성 값을 변경할 수 없도록 제작되었습니다.&lt;/div&gt;&lt;div&gt;속성 값을 변경하여 NotificationData를 정의하기 위해서는 NotificationData.Builder 클래스를 이용해야합니다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3&gt;정리&lt;/h3&gt;&lt;div&gt;&lt;b&gt;# Public 생성자&lt;/b&gt;&lt;/div&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;b&gt;NotificationData.Builder (int id, ChannelData channelData = null)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;id : 정수형 알림 id&lt;/p&gt;&lt;p&gt;channelData : 최근 안드로이드 라이브러리에 추가된 내용으로 알림을 그룹화 함 (null 가능)&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;# Public 메서드&lt;/b&gt;&lt;/div&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;b&gt;SetContentTitle (string value)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;일반적인 알림의 제목을 설정합니다.&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;b&gt;SetContentText (string value)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;일반적인 알림의 내용을 설정합니다.&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;b&gt;SetContentTicker&amp;nbsp;(string value)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;알림 수신 시 노치에 표시되는 한 줄&amp;nbsp;내용을 설정합니다.&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;b&gt;SetSmallIcon&amp;nbsp;(string iconName)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;알림에 노출 될 작은 크기의 아이콘을 설정합니다. (필수)&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;b&gt;SetLargeIcon&amp;nbsp;(string iconName)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;알림에 노출 될 큰 크기의 아이콘을 설정합니다. (선택)&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;b&gt;SetColor&amp;nbsp;(Color32&amp;nbsp;color)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;알림에 노출 되는 작은 크기의 아이콘의 색상을 변경합니다.&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;b&gt;SetBadgeIconType&amp;nbsp;(int&amp;nbsp;type)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;앱 아이콘 위에 노출되는 배지의 형태를 설정합니다.&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;b&gt;SetPriority&amp;nbsp;(int priority)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;알림의 우선 순위를 설정합니다.&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;b&gt;SetDelay&amp;nbsp;(long milliSecond)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;알림을 지연시킵니다. 흔히 스케쥴 알림이라고 말합니다.&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;b&gt;SetAutoCancel&amp;nbsp;(bool value)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;true로 설정할 경우 사용자가 알림을 터치하면 노치에서 자동으로 알림이 제거됩니다.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h1&gt;마치며&lt;/h1&gt;&lt;div&gt;제가 게임을 개발하면서 필요한 메서드만 적용한 상태입니다.&lt;/div&gt;&lt;div&gt;혹시 추가로 필요한 기능이 있으시면 댓글로 남겨주시면 업데이트를 해보도록 하겠습니다.&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Develop/Plug-in</category>
      <category>local</category>
      <category>notification</category>
      <category>plugin</category>
      <category>unity</category>
      <category>로컬알림</category>
      <category>로컬푸시</category>
      <category>안드로이드</category>
      <category>유니티</category>
      <category>플러그인</category>
      <author>다소니닷넷</author>
      <guid isPermaLink="true">https://dasony-lib.tistory.com/7</guid>
      <comments>https://dasony-lib.tistory.com/7#entry7comment</comments>
      <pubDate>Sat, 5 Jan 2019 20:50:07 +0900</pubDate>
    </item>
    <item>
      <title>[UNITY] Google 에서 제공하는 Admob 플러그인 사용시 Crash로 게임 실행이 안될때</title>
      <link>https://dasony-lib.tistory.com/6</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://github.com/googleads/googleads-mobile-unity&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;https://github.com/googleads/googleads-mobile-unity&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;에서 다운 받은 플러그인을 적용하여 애드몹을 사용하는데&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;게임 실행 시 아래와 같은 충돌 메시지와 함께 게임이 종료되는 경우가 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre&gt; &lt;code&gt;   ******************************************************************************
    * The Google Mobile Ads SDK was initialized incorrectly. AdMob publishers    *
    * should follow the instructions here: https://goo.gl/fQ2neu to add a valid  *
    * App ID inside the AndroidManifest. Google Ad Manager publishers should     *
    * follow instructions here: https://goo.gl/h17b6x.                           *
    ******************************************************************************
 
        at android.app.ActivityThread.installProvider(ActivityThread.java:6621)
        at android.app.ActivityThread.installContentProviders(ActivityThread.java:6173)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6079)
        at android.app.ActivityThread.-wrap1(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1791)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:7002)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)
     Caused by: java.lang.IllegalStateException: 
    
    ******************************************************************************
    * The Google Mobile Ads SDK was initialized incorrectly. AdMob publishers    *
    * should follow the instructions here: https://goo.gl/fQ2neu to add a valid  *
    * App ID inside the AndroidManifest. Google Ad Manager publishers should     *
    * follow instructions here: https://goo.gl/h17b6x.                           *
    ******************************************************************************
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;주로 애드몹을 초기화하는 단계에서 충돌이 발생한 경우&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;인데요.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://developers.google.com/admob/unity/start&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;https://developers.google.com/admob/unity/start&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;이&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;글을 보시면 &lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;광고를 요청하기 전에&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;아래와 같이 App ID를 입력하여 초기화 하도록 되어 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;csharp&quot;&gt; using GoogleMobileAds.Api;

public class GoogleMobileAdsDemoScript : MonoBehaviour {
    public void Start()
        #if UNITY_ANDROID
        string appId = &quot;ca-app-pub-3940256099942544~3347511713&quot;;
        #elif UNITY_IPHONE
        string appId = &quot;ca-app-pub-3940256099942544~1458002511&quot;
        #else
        string appId = &quot;unexpected_platform&quot;;
         #endif

         // Initialize the Google Mobile Ads SDK.
        MobileAds.Initialize(appId);
 } &lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;유니티 최신&amp;nbsp;버전에서는 위와 같이 코드를 작성해도 초기화에 실패하여 게임이 종료되는 경우도 있기도 합니다.&lt;/p&gt;&lt;p&gt;플러그인에서 포스트빌드로 App ID를 자동으로 AndroidManifest.xml 파일에 추가해주는 기능이 들어있는데,&lt;/p&gt;&lt;p&gt;이 기능이 정상적으로 동작하지 않아 발생하는 문제인 것 같습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이럴 때에는 당황하지 마시고, Assets/Plugins/Android/GoogleMobileAdsPlugin 폴더에 포함되어 있는&lt;/p&gt;&lt;p&gt;AndroidManifest.xml 파일을 열어 아래와 같이 입력하시면 됩니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;xml&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;!--
This Google Mobile Ads plugin library manifest will get merged with your application's manifest, adding the necessary activity and permissions required for displaying ads.
--&amp;gt;
    &amp;lt;manifest xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot; package=&quot;com.google.unity.ads&quot; android:versionName=&quot;1.0&quot;
                      android:versionCode=&quot;1&quot;&amp;gt;
    &amp;lt;uses-sdk android:minSdkVersion=&quot;14&quot; android:targetSdkVersion=&quot;19&quot; /&amp;gt;
    &amp;lt;application&amp;gt;
        &amp;lt;meta-data android:name=&quot;com.google.android.gms.ads.APPLICATION_ID&quot; android:value=&quot;이 곳에 App Id를 입력해주세요.&quot;/&amp;gt;
    &amp;lt;/application&amp;gt;
&amp;lt;/manifest&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;</description>
      <category>Develop/Tips</category>
      <category>admob</category>
      <category>crash</category>
      <category>initialize</category>
      <category>plugin</category>
      <category>애드몹</category>
      <category>초기화</category>
      <category>충돌</category>
      <category>플러그인</category>
      <author>다소니닷넷</author>
      <guid isPermaLink="true">https://dasony-lib.tistory.com/6</guid>
      <comments>https://dasony-lib.tistory.com/6#entry6comment</comments>
      <pubDate>Thu, 3 Jan 2019 16:54:06 +0900</pubDate>
    </item>
    <item>
      <title>[C#,UI] 마우스 or 터치 입력 포지션이 UI 위에 있는지 체크하기</title>
      <link>https://dasony-lib.tistory.com/5</link>
      <description>&lt;h2&gt;개요&lt;/h2&gt;&lt;p&gt;스마트폰 모바일 게임 개발할 때 조작 방법으로&amp;nbsp;마우스 혹은 터치 입력이 주로 사용됩니다.&lt;/p&gt;
&lt;p&gt;단말기에서 사용할 수 있는 조작 방법으로 터치가 유일하기 때문입니다.&lt;/p&gt;
&lt;p&gt;터치 입력을 이용하여 기능을 제작할 때 UI와 터치가 겹치는 상황이 빈번히 발생하는데요.&lt;/p&gt;
&lt;p&gt;터치 입력 포지션이 UI 위에 있는지 체크하여, 위에 있을 때는&amp;nbsp;기능을 하지 않도록 막으면 해결할 수 있어요.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;사용방법&lt;/h2&gt;&lt;p&gt;터치 입력 포지션이 UI 위에 있는지 체크하기 위해서 EventSystems 라이브러리를 참조해야합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;csharp&quot;&gt;using UnityEngine.EventSystems;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h3&gt;예제) 마우스 입력 시&lt;/h3&gt;&lt;pre&gt;&lt;code class=&quot;csharp&quot;&gt;public class InputTest : MonoBehaviour {
    void Update () {
        // 입력 포지션이 UI 오브젝트 위에 있는지 체크
        if(EventSystem.current.IsPointerOverGameObject()) {
            return; // 아래 마우스 기능을 하지 않고 리턴
        }

        if(Input.GetMouseButtonDown(0)) {
            Debug.Log(&quot;Mouse Button Down!&quot;);
        }
    }
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Develop/Tips</category>
      <category>UI</category>
      <category>unity</category>
      <category>마우스</category>
      <category>유니티</category>
      <category>체크</category>
      <category>터치</category>
      <category>포지션</category>
      <author>다소니닷넷</author>
      <guid isPermaLink="true">https://dasony-lib.tistory.com/5</guid>
      <comments>https://dasony-lib.tistory.com/5#entry5comment</comments>
      <pubDate>Tue, 20 Nov 2018 02:32:00 +0900</pubDate>
    </item>
    <item>
      <title>[C#, INSPECTOR] 유니티 인스펙터를 빠르고 간단하게 커스텀하기</title>
      <link>https://dasony-lib.tistory.com/4</link>
      <description>&lt;p&gt;유니티 에셋이나 누군가의 배포를 통해 다운받은 플러그인을 사용하다 보면, 인스펙터에 제목 라벨, 슬라이더 등의 UI로 이루어진 것을 보신적이 있으시죠?&lt;/p&gt;&lt;p&gt;이런 플러그인은&amp;nbsp;대부분 스크립트 별로 커스텀 에디터 스크립트를 작성하여 인스펙터를 꾸민거예요.&lt;/p&gt;&lt;p&gt;커스텀 에디터 스크립트를 작성하는건 생각보다 시간 투자도 많이 필요하고 번거롭고, 귀찮기까지 하죠.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이럴때 유니티에서 제공하는 몇가지 에디터 속성을 사용하면 인스펙터를 보다&amp;nbsp;쉽고 빠르게 커스텀할 수 있어요.&lt;/p&gt;&lt;p&gt;물론 커스텀 에디터 스크립트를 작성하는 것보다 디테일하거나 멋지게 커스텀 할 수는 없지만, 간단한 스크립트를 커스텀 할 땐 유용해요.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h1&gt;1. Header&lt;/h1&gt;&lt;h3&gt;인스펙터에 굵은(BOLD) 타입으로 라벨을 출력합니다. 변수들을 특정 목적에 따라&amp;nbsp;구분할 때 유용하게&amp;nbsp;사용할 수 있습니다.&lt;/h3&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 418px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99A54B3B5BE77CB707&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99A54B3B5BE77CB707&quot; width=&quot;418&quot; height=&quot;97&quot; filename=&quot;스크린샷 2018-11-11 오전 9.48.47.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;사용 예제&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;csharp&quot;&gt;
public class CustomInspector : MonoBehaviour {
    [Header (&quot;Input Values&quot;)]
    public int a;
    public int b;
}

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h1&gt;2. Range&lt;/h1&gt;&lt;h3&gt;데이터 타입이 int 혹은 float 일때 입력받는 값을 범위 내에서 슬라이더로 조정할 수 있도록 만들어줍니다.&lt;/h3&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 419px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9984674F5BE77D8204&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9984674F5BE77D8204&quot; width=&quot;419&quot; height=&quot;101&quot; filename=&quot;스크린샷 2018-11-11 오전 9.52.43.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;사용 예제&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;csharp&quot;&gt;
public class CustomInspector : MonoBehaviour {
    [Header (&quot;Input Values&quot;)]
    [Range (1, 100)] public int a;
    [Range (-50, 50)] public int b;
}

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h1&gt;3. Multiline&lt;/h1&gt;&lt;h3&gt;데이터 타입이 string&amp;nbsp;일때 생성되는 TextField를 여러줄이 입력 가능하도록 바꿔줍니다.&lt;/h3&gt;&lt;p&gt;Before&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 417px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/994D28435BE77F3905&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F994D28435BE77F3905&quot; width=&quot;417&quot; height=&quot;113&quot; filename=&quot;스크린샷 2018-11-11 오전 9.59.29.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;After&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 420px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99A9CC435BE77F3905&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99A9CC435BE77F3905&quot; width=&quot;420&quot; height=&quot;142&quot; filename=&quot;스크린샷 2018-11-11 오전 9.59.56.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;사용 예제&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;csharp&quot;&gt;
public class CustomInspector : MonoBehaviour {
    [Header (&quot;Input Values&quot;)]
    [Range (1, 100)] public int a;
    [Range (-50, 50)] public int b;

    [Multiline ()] public string multiLine;
}

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h1&gt;4. Space&lt;/h1&gt;&lt;h3&gt;Inspector UI 사이에 공백을 추가합니다.&lt;/h3&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 417px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9922013C5BE780E20B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9922013C5BE780E20B&quot; width=&quot;417&quot; height=&quot;150&quot; filename=&quot;스크린샷 2018-11-11 오전 10.05.53.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;사용 예제&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;csharp&quot;&gt;
public class CustomInspector : MonoBehaviour {
    [Header (&quot;Input Values&quot;)]
    [Range (1, 100)] public int a;
    [Range (-50, 50)] public int b;

    [Space()]
    [Multiline ()] public string multiLine;
}

&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h1&gt;5. TextArea&lt;/h1&gt;&lt;h3&gt;데이터 타입이 string&amp;nbsp;일때 TextArea로 출력합니다.&lt;/h3&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 419px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/996BB2385BE782060B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F996BB2385BE782060B&quot; width=&quot;419&quot; height=&quot;210&quot; filename=&quot;스크린샷 2018-11-11 오전 10.12.00.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;사용 예제&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;csharp&quot;&gt;
public class CustomInspector : MonoBehaviour {
    [Header (&quot;Input Values&quot;)]
    [Range (1, 100)] public int a;
    [Range (-50, 50)] public int b;

    [Space()]
    [Multiline ()] public string multiLine;
    [TextArea ()] public string textArea;
}

&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h1&gt;6. ColorUsage&lt;/h1&gt;&lt;h3&gt;데이터 타입이 color 일때 ColorField와 ColorPicker를 옵션에 따라 변경합니다.&lt;/h3&gt;&lt;p&gt;속성을 추가하지 않으면 일반 컬러&amp;nbsp;필드와 일발 컬러 피커가 출력됩니다.&lt;/p&gt;&lt;p&gt;일반 컬러&amp;nbsp;피커, HDR 컬러&amp;nbsp;피커, 알파 조정 없애기 등의 옵션이 있습니다. 아래는 일반 컬러&amp;nbsp;피커와 HDR 컬러 피커 비교입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;일반 컬러 필드와 피커&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 405px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99123E4B5BE7845F11&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99123E4B5BE7845F11&quot; width=&quot;405&quot; height=&quot;20&quot; filename=&quot;스크린샷 2018-11-11 오전 10.18.13.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 236px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/998E8B4B5BE7845F14&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F998E8B4B5BE7845F14&quot; width=&quot;236&quot; height=&quot;496&quot; filename=&quot;스크린샷 2018-11-11 오전 10.16.48.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;HDR 컬러 필드와 피커&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 409px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9925F14B5BE7845F0A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9925F14B5BE7845F0A&quot; width=&quot;409&quot; height=&quot;22&quot; filename=&quot;스크린샷 2018-11-11 오전 10.17.43.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 235px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9974854B5BE7846014&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9974854B5BE7846014&quot; width=&quot;235&quot; height=&quot;583&quot; filename=&quot;스크린샷 2018-11-11 오전 10.17.24.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;사용 예제&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;csharp&quot;&gt;
public class CustomInspector : MonoBehaviour {
    
    .
    .
    .

    [Space()]
    public color normalColor;
    [ColorUsage (true, true)] public color hdrColor;
}

&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h1&gt;7. Tooltip&lt;/h1&gt;&lt;h3&gt;프로퍼티의 데이터 타입과 관계없이 해당 프로퍼티에 대한 설명 UI를 추가합니다.&lt;/h3&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 419px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99871C445BE7880E17&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99871C445BE7880E17&quot; width=&quot;419&quot; height=&quot;62&quot; filename=&quot;스크린샷 2018-11-11 오전 10.36.53.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;사용 예제&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;csharp&quot;&gt;
public class CustomInspector : MonoBehaviour {
    
    .
    .
    .

    [Space()]
    [Tooltip (&quot;이 곳에 값을 입력해주세요.&quot;)] public string value;
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Develop/Tips</category>
      <category>CUSTOM</category>
      <category>editor</category>
      <category>Inspector</category>
      <category>unity</category>
      <category>에디터</category>
      <category>유니티</category>
      <category>인스펙터</category>
      <category>커스텀</category>
      <author>다소니닷넷</author>
      <guid isPermaLink="true">https://dasony-lib.tistory.com/4</guid>
      <comments>https://dasony-lib.tistory.com/4#entry4comment</comments>
      <pubDate>Sun, 11 Nov 2018 10:49:29 +0900</pubDate>
    </item>
  </channel>
</rss>