2017년 5월 29일 월요일

Unity 개발 팁 - isDebugBuild, EditorOnly Tag

빠르게 개발 할 때 많이 사용하고 있는 것이 있어서 개발팁으로 남긴다.

#1
Debug.isDebugBuild
빌드가 디버그 빌드라면 true 를 반환 하기 때문에 여러가지 확인용으로 사용할 수 있다.

샘플 코드

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void Example() {
        if (Debug.isDebugBuild)
            Debug.Log("This is a debug build!");
        
    }
}

참고 문서
https://docs.unity3d.com/ScriptReference/Debug-isDebugBuild.html


--------------------------------------------------------------

#2
게임 Obeject의 Tag를 EditorOnly 로 지정하면
해당 오브젝트는 Editor 상에서만 사용하고,
실제로 빌드하면 해당 태그가 지정된 오브젝트는 제외되고 빌드되어 편리하다.
테스트용으로 필요하여 하이어라키에 추가해둔 오브젝트를 일일히 삭제할 필요가 없다.

2017년 5월 25일 목요일

Unity 키보드로 히든 키 입력하기

특정 키를 입력받고 있다가 정답이 되면 true 를 돌려주는 간단한 코드.
Start()에 입력된 값을 바꾸거나, Inspector 에서 적당히 미리 정답 값을 입력해두면 된다.

재미로 만들었다. 어딘가에 적당히 써보자.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HiddenKeyInput : MonoBehaviour {

    public bool _key = false;

    public List _pool, _seikai;

    void Start()
    {
        // 정답
        // 왼쪽시프트 + 상하좌우AB 를 순서대로 누른다.
        // _key 가 트루가 된다.
        // 시프트를 떼면 리셋, _key 가 false 가 되고 _pool 에 쌓여있던 내용도 초기화 된다.
        _seikai.Add("상");
        _seikai.Add("하");
        _seikai.Add("좌");
        _seikai.Add("우");
        _seikai.Add("에이");
        _seikai.Add("비");
    }

    // Update is called once per frame
    void Update () {

        if (Input.GetKey(KeyCode.LeftShift))
        {
            if (Input.GetKeyDown(KeyCode.UpArrow))
            {
                _pool.Add("상");
                Debug.Log("상");
            }
            if (Input.GetKeyDown(KeyCode.DownArrow))
            {
                _pool.Add("하");
                Debug.Log("하");
            }
            if (Input.GetKeyDown(KeyCode.LeftArrow))
            {
                _pool.Add("좌");
                Debug.Log("좌");
            }
            if (Input.GetKeyDown(KeyCode.RightArrow))
            {
                _pool.Add("우");
                Debug.Log("우");
            }
            if (Input.GetKeyDown(KeyCode.A))
            {
                _pool.Add("에이");
                Debug.Log("에이");
            }
            if (Input.GetKeyDown(KeyCode.B))
            {
                _pool.Add("비");
                Debug.Log("비");
            }

            if (_seikai.Count == _pool.Count)
            {
                
                for (int i = 0; i < _seikai.Count; i++)
                {
                    if (_seikai[i] == _pool[i])
                    {
                        if (i == _seikai.Count - 1)
                            _key = true;
                    }
                    else
                    {
                        break;
                    }
                }

            }
            
        }
        else
        {
            if (_pool.Count > 0)
            {
                _pool.Clear();
            }
            _key = false;
        }
  
 }
}

2017년 5월 15일 월요일

uGUI EventSystem 을 이용한 Mouse Hover Check

윈도우 프로젝트를 하고 있다보니 마우스 포인터를 감지할 일이 생겼다.
깔끔하고 쉬운 것으로는 Unity 에서 제공하는 컴포넌트를 사용하면 된다.

[1]
Event Trigger 를 이용하여 Pointer Enter / Exit 로 체크하는 방법.
사용할 uGUI 캔버스 안의 UI 오브젝트를 고른다. (hit 가 가능해야 함.)
Add Component 를 눌러서 Event Trigger 컴포넌트를 붙인다.
원하는 이벤트를 사용한다.

[2]
Event System 을 이용하여 전체적으로 확인하는 방법
특정 영역이 아니라 윈도우 안에 액티브 되었는지 확인이 필요하면
EventSystem 에서 IsPointerOverGameObject() 를 통해 확인할 수 있다.
아래는 샘플 코드이다.

public class KpaperTest_EventSystemHover : MonoBehaviour {

    public EventSystem _eventsystem;

 // Use this for initialization
 void Start () {
        _eventsystem = GameObject.Find("EventSystem").GetComponent();

    }
 
 // Update is called once per frame
 void Update () {

        if (_eventsystem.IsPointerOverGameObject())
            Debug.Log("Active!!!");

    }

2017년 5월 12일 금요일

uGUI 에 Image 를 표시하고 Sprite Animation 을 하자

uGUI 에 표시할 수 있는 스프라이트 이미지에는 애니메이터를 붙여도 애니메이션이 되지 않는다.
비용 부담을 신경 쓰지 않고 간단하게 애니메이션을 표시하는 방법으로
SpriteRenderer 로 넘겨주는 Sprite 이미지를 매 업데이트 시점마다 Image 에도 뿌려주면 잘 나온다.

샘플 코드를 해당 image 오브젝트에 붙여두자.
(애니메이터와 스프라이트 랜더러도 붙어있어야 한다.)



using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;


public class SpriteRendererToUguiImage : MonoBehaviour {

    [SerializeField]
    private SpriteRenderer _spriteRenderer;

    [SerializeField]
    private Image _image;


 // Use this for initialization
 void Start () {

        if (_spriteRenderer == null)
            _spriteRenderer = this.GetComponent<SpriteRenderer>();

        _spriteRenderer.enabled = false;

        if (_image == null)
            _image = this.GetComponent<Image>();

 }
 
 // Update is called once per frame
 void Update () {

        _image.sprite = _spriteRenderer.sprite;
  
 }
}

2017년 5월 8일 월요일

새 게임 Live2D 모델링 중간 과정

새로 만들고 있는 게임(?)의 모델링 중간 과정
여러가지 시행착오도 겪고 팀원들끼리 감정도 조금씩 닳고 있고
 여러가지를 소모하면서 그래도 열심히 오늘도 게임을 만들고 있다.
 누군가가 재밌어 해주면 정말 좋겠다.
 개발 도중의 스크린샷 (여주인공) Vertex 가 선택된 화면만 보니 왠지 조금 무섭다. ^^;;

하지만 애정(?)을 담아 만들고 있으니까
그래도 비쥬얼은 볼만한 작품이 나올 듯
원화가 친구가 엄청 분발해주고 있어서 나도 자극이 된다.


2017년 5월 2일 화요일

도메인 갱신 실수! (으악)

어느날 갑자기 블로그가 접속이 안되서 일시적인 문제인가 하고 넘어갔는데, 아뿔싸... kpaper.com 도메인 만료일이 지났다. 황급하게 복구 신청. 몇일 뒤면 원래 블로그 주소인 blog.kpaper.com 로 접속이 가능해질 듯..