레이블이 Unity3D인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Unity3D인 게시물을 표시합니다. 모든 게시물 표시

2017년 9월 8일 금요일

Unity Editor 를 켤 때 마다 무언가를 실행하기 (버전 정보 갱신)

버전 정보를 빌드 할 때 마다 일일히 써주는게 귀찮았다.

빌드 전에 버전 정보를 갱신해주는 스크립트를 돌리면 되는데,
아래 두가지 이유로 에디터를 켤 때 (포커스가 올 때?) 마다 버전 정보를 갱신해 줬다.
1. 다른 사람이 세팅한 빌드 머신을 건드리기 귀찮아서
2. 에디터 건드릴 때 마다가 좋아서

여튼 아래는 간단히 짠 코드
버전 정보의 형식은 예시로 적당히 쓴 것이다.
4단위로 1.0.년.월일
예) 1.0.17.1159

혹시 실행이 안되거나 권한 없음 오류가 나면, 유니티 에디터를 실행할 때 관리자 권한으로 실행하면 된다.


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

[InitializeOnLoad]
public class Startup
{
    static Startup()
    {
        string VersionInfo = "1.0." + string.Format("{0:00}", System.DateTime.Now.Year).Substring(2, 2) + "." + string.Format("{0:00}", System.DateTime.Now.Month) + string.Format("{0:00}", System.DateTime.Now.Day);
        System.IO.File.WriteAllText(Application.dataPath + "/Resources/AppVersionInfo.txt", VersionInfo.ToString());
        Debug.LogWarning("오늘의 버전 정보 갱신 : " + VersionInfo + "\n저장 경로 : " +Application.dataPath+"/Resources/AppVersionInfo.txt");
    }
}

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년 4월 25일 화요일

FBX Animation 및 Key Event를 사용하기

최근 작업 중에 3D 캐릭터의 애니메이션 재생이 필요했는데,
상황이 닥치면 하려고 신경쓰고 있지 않다가,
가이드가 살짝 필요한 상황이 되어서 간단히 남겨본다.

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

Unity 는 FBX 파일의 애니메이션 재생이 가능하다.
하지만, FBX 파일 그대로는 ReadOnly 라서 이것을 따로 복제해서 사용해야 한다.

시간이 없어서 일단 글만 먼저 정리!

[FBX 에서 애니메이션 파일을 가져오기]

1. 캐릭터 모델 데이터와 애니메이션 FBX 를 준비한다. (맥스, 마야, 블렌더 등등)

2. 1을 Unity Asset 폴더에 넣는다.

3. Unity 내 Project 탭에서 애니메이션 FBX 를 클릭해서 드롭다운 메뉴를 연다.
Animation 아이콘이 보이면 이것을 Control + D 해서 복제 한다.

4. Hierarchy 에 사용할 3D 캐릭터 모델을 배치

5. 해당 모델에 Animator 를 세팅

6. Animator 에서 움직일 Animation 을 3에서 복제한 Animation 파일로 지정한다.
(FBX 파일 내에 있는 것 말고 복제해서 밖에 생긴 것을 지정)

7. Unity 내에서 WIndow > Animation 탭을 연다.

8. Animation 탭이 열린 상태로 Hierarchy 의 모델 데이터를 클릭하면, 현재 적용된 Animation 을 확인할 수 있고 유니티 내에서 수정도 가능하다.

9. 끝


[Animation Frame에 Key Event 넣기]

FBX 파일 그대로 사용하기는 불가능 (Read Only)하기 때문에 먼저 애니메이션 파일을 복제해두어야 한다. (위 부분 FBX에서 애니메이션 파일을 가져오기를 먼저 한다.)

1. 적당한 C# 스크립트를 하나 만든다.
Ex) AnimationEventManager.cs
public void KeyEventReceiver(GameObject _obj)
        {
            Instantiate(_obj, this.transform, false);
        }

2. 만든 스크립트를 사용할 모델의 게임오브젝트에 add 한다.
(Animator가 붙어있는 gameObject)

3. Unity > Window > Animation 탭에서 Key Event 를 붙이고 싶은 Animation 을 선택한다.

4. Add Key Event 를 선택

5. 만들어진 Key를 클릭해서 Inspector 를 보면 호출할 함수를 풀다운 메뉴에서 선택할 수 있다. (만일 안되면 아까 그 키를 오른 클릭해서 Edit Key Event 선택)
여기에서 아까 만든 스크립트의 KeyEventReceiver() 를 선택한다.

6. 같은 화면의 GameObject 패러미터에 해당 이벤트 동작 시마다 생성할 프리팹을 끌어다 놓는다.

7. 끝.


참고 페이지 : https://docs.unity3d.com/Manual/animeditor-AnimationEvents.html

2017년 4월 5일 수요일

Unity 엔진에서 Mesh 만들기 기본

이번에 좀 복잡한걸 (사람 얼굴 ㅠㅠ) 직접 그려야 하는 일이 발생하여,
귀찮음에 울면서 했다.

사실 Mesh 생성 방법 자체는 간단하다.

1. MeshFilter 를 생성
2. MeshRenderer 를 생성
3. MeshFilter 에서 Mesh 를 _mesh 등으로 가져온 뒤
4. 정점을 찍고,
5. uv 를 설정하고,
6. 삼각형을 그려준다. 이 때 그리는 순서에 따라서 앞뒤가 바뀌니까 주의.
만일 그린게 어디갔는지 보이지 않으면, 카메라를 돌려보자 반대로 그려져있을 수 있다.

1까지는 그럭저럭 금방했는데,
2와 3은 노가다로 열심히 맞춰서 만들었다.. -_-;
삼각형을 잘 그려야 한다. <-

아래는 삼각형을 그리는 예제.
void Start(){


        gameObject.AddComponent<MeshFilter>();
        gameObject.AddComponent<MeshRenderer>();
        _mesh = GetComponent<MeshFilter>().mesh;

        // 그릴 값을 입력.
        mesh.vertices = new Vector3[] { new Vector3(0, 0, 0), new Vector3(0, 1, 0), new Vector3(1, 1, 0) };
        mesh.uv = new Vector2[] { new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1) };
        mesh.triangles = new int[] { 0, 1, 2 };

}

2017년 4월 4일 화요일

마스크 오브젝트 쉐이더 간단하게 만들기

역시 일단 먼저 해봐야 해.

Unity 엔진 내에서 Shader 를 하나 만들고 아래의 코드를 입력한다.
그리고 Material 도 새로 만들어 조금전에 만든 Shader를 선택
(아래 코드는 Kpaper/MaskObj )

마스킹 오브젝트를 이용해서 AR 컨텐츠를 만드는데 사용하면 된다.

참 쉽죠?


Shader "Kpaper/MaskObj" {
 SubShader{
  // regular geometry 이후에 마스크를 render 한다.

  Tags{ "Queue" = "Background" }

  // RGBA 채널을 그리지 않는다, Depth buffer 로만 사용

  ColorMask 0
  ZWrite On

  // 패스에서는 아무것도 하지 않는다.

  Pass{
 }
 }
}


2017년 3월 22일 수요일

Unity 오브젝트에 주석을 달아버리는 간단한 팁

유니티 작업이 좀 많아져서 주석이 필요한 오브젝트에 붙여두고 싶었다.

에디터 편집 코드를 짜서 멋지게 만드는 것도 좋지만. (ex : OnInspectorGUI() 등을 이용)
시간이 부족할 때 가성비가 안좋으니 아래와 같이 해본다.

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


// 파일 명은 GameObjectComments.cs 로 해야 한다.

using UnityEngine;
using System.Collections;

    /// 
    /// 게임오브젝트의 인스펙터에 코멘트를 추가한다.
    /// 
    public class GameObjectComments : MonoBehaviour
    {

        /// 
        /// 주석 3줄까지는 바로 보인다.
        /// 
        [Multiline]
        public string text;
    }

요런식으로 여기저기 붙여두면, 빠르게 많이 만들어서 헷갈릴 때 도움이 될 주석을 달아두어 편하다.
하지만 3줄이 넘어가야 한다면, 에디터 코드를 만들어서 보기 좋게 하는 편이 좋다.

2017년 3월 21일 화요일

Unity3D WebCamTexture 를 ByteArray(Color32) 로 가져오기

처음에는 별거 아닌 줄 알았다.
(해보니까 헬게이트가. ㅠ_ㅠ)
이것 때문에 몇 일 야근하면서 삽질했었기에 기록을 남긴다.

----------

Unity3D 에서 웹캠텍스쳐를 만들어 초기화 할 때,
Request 한 해상도에 근접한 해상도를 리턴한다.
웹캠 장치 몇개를 테스트 했더니 의외로 640x480 이 지원 안되는 캠이 있더라.
(PC는 캠도 다양하고 그 캠의 스펙도 다양하다라는건 뻔히 알고 있었으나 막상 당하니 낭패... )

거기다가 문제는 WebCamTexture.GetPixels32() 요게 되다가 안되다가 한다.
구글 선생님한테 물어보아 찾아봐도 별달리 해결책은 없었는데..

Unity3D WebCamTexture.GetPixels32() 참고 문서
https://docs.unity3d.com/ScriptReference/WebCamTexture.GetPixels32.html


어떤 식으로 잘 안되는가 하니,
리턴된 Color32 Array를 확인해보면 무조건 RGBA(0,0,0,255) 가 출력되고 있다.

전부 문제가 있는 것은 아니고 웹캠마다 다르고, 그 웹캠의 지원해상도 마다 다르다.
(의외로 XspliteBroadCaster 의 가상 카메라는 다 잘되더라.)

여러개로 시험해본 결과 모델과 해상도 조합을 맞춰야 값을 받아올 수 있는 희한한 상태였다.
이대로는 문제가 있기에 확실하게 사용할 수 있는 해결 방법이 뭐가 있을까 알아봤는데...

결국 내가 선택한 해결 방법은 아래와 같다.
encode2png 를 이용하는 방법이다.


// 사용법 ConvertPNGBytesToBGRABytes(_texture2D.encode2Png());

    private byte[] ConvertPNGBytesToBGRABytes(byte[] data)
    {
        if (data == null || data.Length < 1)
            return null;

        byte[] buffer = new byte[_webcamTexture.width * _webcamTexture.height * 4];

        using (System.IO.MemoryStream ms = new System.IO.MemoryStream(data))
        {
            Bitmap bmp = new Bitmap(ms);
            Rectangle rcBitmap = new Rectangle(0, 0, bmp.Width, bmp.Height);
            BitmapData rData = bmp.LockBits(rcBitmap, ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
            Marshal.Copy(rData.Scan0, buffer, 0, buffer.Length);
            bmp.UnlockBits(rData);
        }

        return buffer;
    }


이 방법은 부담이 좀 되긴 하는데, 문제없이 잘 출력되고 있다.
프로젝트 완료까지 시간이 없어서 다음에 좀 더 고민해서 개선하는 것으로 -.,-;;

2017년 3월 16일 목요일

Unity Remote 5 iOS 연결하기

유니티 리모트라는 앱은 알고 있기는 오래 됐는데,
생각보다 잘 동작하지 않는 느낌에 그다지 활용하고 있지 않았다.

우연히 유니티 리모트를 이용한 터치이벤트 확인에 관한 글을 보다가 (https://eastfever.blogspot.kr/2017/02/unity3d-unity-remote.html)

유니티 리모트 버전 5가 나왔었음을 깨닫고 한번 테스트 해보았다.

와우...!
일단 디자인이 예전보다 훨씬 볼만해졌다.
유니티5로 통일된 깔끔한 디자인!
뭔가 좋아보인다.

사용법도 더(?) 간단해졌는데,
Edit > Project Settings > Editor 에 들어가서 Device를 세팅하면 끝이다.

기본적으로는 내 아이폰이 보이지 않는다.
유선으로 연결하면 풀다운 리스트에 나타난다.
내 경우는 굳이 유니티를 재시작하지 않아도 표시되었다.


복잡한 설정 없이 케이블만 연결하고 바로 쓸 수 있는 점은 좋지만,
아무래도 압축된 화면이라 그래픽이 깨져보이거나, 
터치했을 때 폰에서 보이는 반응이 늦는 것은 어쩔 수 없다.

터치 이벤트만 받고 유니티에서 돌아가는 것을 보는 방식으로 사용하거나,
빌드 시간을 아껴서 초기기동 문제 확인 하는 정도로 사용하면 좋을 듯 하다.

MacBook Pro, iPhone 6s+ 에서 확인

2017년 3월 15일 수요일

if (Debug.isDebugBuild) - Unity3D 사소한 팁

오늘은 정말 사소한 팁
개발 하던 도중에 디버그로그를 많이 찍어놨을 때,
여러가지 방법으로 빌드 할 때 제외하거나 할 수 있지만,

빌드 결과물에만 출력되지 않게 미리 조치하려면 아래와 같이 간단한 방법이 있다.



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

물론 if 를 한번 타게 되기 때문에 비용은 조금 늘겠지만,
편하고 빠르게 만들자라는 컨셉에서는 쓸만한 팁인듯.
이런걸 지저분하고 빠른 방법이라고 부르면 될 것 같다.



2017년 2월 24일 금요일

Unity3D 외부 리소스 가져오기

유니티로 빌드하면 에셋이 묶여서 엑세스가 불가하게 된다.
대량의 에셋을 추가하려면 에셋 번들을 이용하면 되는데,
이런 경우 말고 직접 리소스를 추가하고 싶은 경우가 있다.

최근 프로젝트에서 필요해서 하는김에 간단히 정리해봤다.
처음 하는 사람들에게 도움이 되길 -_-*

# Resource.Load 사용하기

private void ResourceLoadSample(){

  Texture2D texture = new Texture2D(0, 0); 
  string PATH = "Texture/image.jpg";    // 이미지 파일 패스를 써준다. 
  //중요한 것은 유니티 프로젝트 Assets/Resource/ 폴더 이후의 경로를 써주는 것이다. 이 폴더는 맘대로 바꿀 수가 없다.
  texture = Resources.Load(PATH,typeof(Texture2D)) as Texture2D;  // 이미지 로드
  targetObject.mainTexture = texture;  // 타겟 오브젝트에 메인 텍스쳐를 넣어준다.

}

# System.File.IO로 직접 가져오기
Resource 폴더가 아니라 다른 폴더 특히 StreamingAssets에서 가져오려면

Resource.Load 함수를 쓰지 말고 직접 System.File.IO 로 가져와야 한다.
byte[] 로 가져온 다음에 Texture2D.LoadImage()를 사용하여 텍스쳐2D로 읽어오면 된다.



private void SystemIOFileLoad(){

byte[] byteTexture = System.IO.File.ReadAllBytes(Path); 
    if (byteTexture.Length > 0) 
    { 
        texture = new Texture2D(0, 0); 
        texture.LoadImage(byteTexture); 
    } 
}


# 원하는 경로/파일에 엑세스 하기

# StreamingAssets 폴더의 하위 폴더/파일에 접근해본다.
Path = System.IO.Path.Combine(Application.streamingAssetsPath, path); // path = 하위폴더 "하위폴더1/하위폴더2/file.png";


2017년 2월 22일 수요일

Unity3D에서 uGUI Button 을 동적으로 생성할 때, 클릭 이벤트 추가 하는 방법

uGUI 로 동적 버튼을 생성할 때 코드로 클릭 이벤트를 추가하려면,
아래와 같은 방법으로 onClick 이벤트를 추가한다.


_spawnedButton.GetComponent<Button>().onClick.AddListener(delegate() { 게임오브젝트.GetComponent<컴포넌트 클래스 이름>().실행할 함수(); });

2017년 2월 21일 화요일

Unity3D 용 Json Parser - JsonUtility(Unity3D 5.3 Later), JsonObject

Unity3D로 Json 파일을 좀 사용할 일이 있어서 알아보았다.

그 동안 기획일 하면서 데이터만 만들었지,
직접 뭔가를 해볼일은 없었는데 이참에 해보는 것으로...

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

Unity3d Json Parser를 검색해보면

- JsonFX (가장 편하다는 평인데, 사이트 접속 불가. DLL 은 구했지만 스킵.)
- LitJson (iOS 이슈 게시물이 상당히 많다.. 위험)
- MiniJson (EastFever 님의 추천!!)
- JsonObject (직접 테스트 해본 것. 문제 없음)

등이 나오는데

일단은 JsonObject 를 사용해봤다.
이유는 Unity3D Asset Store에 등록되어있는데다가 무료고,
다들 잘 사용하고 있는 것 같아서 선택했다.

다운로드 및 레퍼런스 위키는 아래 주소에서 확인 가능하다.
http://wiki.unity3d.com/index.php/JSONObject#Download

나는 간단하게 읽고 쓰기만 할 생각이라서 뭐 다른건 지원된다고 해도 그러려니 상태였다.!
당연히 유니티 5.5에서도 문제 없었기에 이걸로 써야지~ 하고 결정!!!


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


그.. 그런데... 두둥!
조금 더 알아보다 보니,

유니티 5.3 부터 JsonUtility 라는 내장 API 가 생긴 것이다. 두두둥..!!

(몰랐다니, 아니 대수롭지 않게 보고 흘려서 까먹은듯,
릴리즈 블로그 읽기를 소홀히 한 제 탓입니다. T_T)

그래서 바로 쓱쓱 테스트 !!!

일단 레퍼런스 문서를 보자.
https://docs.unity3d.com/ScriptReference/JsonUtility.html


# ToJson 사용 방법 (코드 예제)


using UnityEngine;

[System.Serializable]
public class MyJsonClass
{
    // 사용할 Json Key 를 정의
    public int level;
    public float timeElapsed;
    public string playerName;

}

public class JsonUtilityTest : MonoBehaviour {

    private void WriteJSon() {
        MyJsonClass myObject = new MyJsonClass();
        myObject.level = 5;
        myObject.timeElapsed = 14.75f;
        myObject.playerName = "Kpaper ToJson Test";

        string json = JsonUtility.ToJson(myObject);
        Debug.Log(json);
    }
}

# FromJson 사용 방법. (더 자세한 내용은 위의 레퍼런스 사이트보면 잘 나와 있다.)


JsonUtility.FromJson<MyJsonClass>(json);

------

딱 내가 원하는 것만 간단하게 쓸 수 있어서 좋았다.
손쉽게 시리얼라이즈!

아무래도 엔진에 종속되서 개발을 하다 보니,
외부 에셋을 쓰기 보다는 내장된게 좋을 것 같아서 방향 선회!를 하는 것으로 결론...

끝!

P.S : 교훈. 멀리서 찾지 말자 -_-;;;

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

[내용 업데이트]

으헉!!
JsonUtility는 Json 타입 중 Property Type 에는 사용할 수 있는데, Dictionary Type 은 사용할 수 없다.

구글 선생님한테 물어봐도 고통, 포럼 유저들도 다 같이 고통 중이었다.
(언젠간 업데이트 되지 않을까 하고 헛된 희망을 가져봤다.)

하지만 계속 구글링 해본 결과, 다행히 구글 선생님은 일본 블로그 하나를 추천해주셨다.
http://kou-yeung.hatenablog.com/entry/2015/12/31/014611
(杏仁さん、ありがとうございます。 T_Td)

ISerializationCallbackReceiver 를 이용하는 방법이다.

이걸로 거의 해결! (왜 거의인지는 나중에 다시 포스팅 하겠다. ㅜㅜ)

P.S 2 : 그냥 평범하게 선구자분들에게 추천 받은 것으로 할 걸, 왜 그랬을까. ㅠ_ㅠ...

<끝>

2017년 1월 30일 월요일

Live2D iOS Build 했을 때 얼굴 텍스쳐가 깨져 보이는 문제 해결

이번 설 연휴는 인디게임 제작에 많이 사용했다.

주로 노가다 하는데 사용했는데,
이번 프로젝트는 애니메이션 처리를 어떻게 할까 고민하다가 Live2D 를 사용하기로 했다.

인디팀으로 3인조인 우리에게
일일히 유니티 기능을 다 가르치는 것보다,
Live2D 애니메이터 툴을 사용하는 편이
일반인이 보편적인 개념으로 키 애니메이션 잡기에 좋을 것 같다고 판단했기 때문

그리고 유니티 소스를 건드리다가 사고가 나는 경우도 적을 것이고...
모델링은 내가 할 수 밖에 없는게 문제지만

그래서 여주인공을 모델링 했다.
(한명 만드는데 시행착오가 많아서 10번쯤 다시 만든듯... ㅠㅠ 약 30시간 정도 소비)


이 과정에서 발생한 귀찮고 심각한 문제가 하나 있다.

안드로이드 빌드에서는 문제가 없었는데,
같은 세팅의 iOS 빌드 에서는 그래픽이 꺠져보이는 현상이 발생했다.



좀 찾아보니 텍스쳐 랜더 관련 문제인 것 같아서
해당하는 모델 데이터의 텍스쳐 세팅을 바꿔준다.




기껏 만든 모델이다 고해상도라 조금 부담은 되지만,
그래도 깔끔하게 보여지고 싶었기에 아래와 같이 변경.

Override for iOS
Texture Size 설정 (1:1)
RGBA 16Bit

이렇게 해서 확인해보면 해결!

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

아마 유니티 5.5 이후 버전에서 뭔가 바뀌면서 발생한 문제인 듯.
옛날에는 경험한 적이 없다.

작업한 캐릭터도,
나중에 좀 정리가 되었을 때 블로그에서 소개할 수 있을 정도가 되면 좋겠다.. ^^;

2017년 1월 5일 목요일

코드 조각 - Mesh 에서 Vertices 위치 가져오기 / 수정하기

Unity3D에서 Mesh 의 정점을 직접 컨트롤 할 일이 생겨서 찾아봤다.

만일 정해진 범위에서 애니메이션을 하려면 Maya 등에서 BlendShape를 이용해서 애니메이션을 만드는게 낫다.

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

// MeshFilter 로 부터 Mesh 를 가져와서 여기에 넣는다.
private mesh _mesh;

// 잦은 업데이트를 위한 mesh 최적화
// https://docs.unity3d.com/kr/current/ScriptReference/Mesh.MarkDynamic.html

_mesh.MarkDynamic();

// _mesh.vertices 에서 모든 vertices의 Vector3 좌표를 가져오거나 넣을 수 있다.

// 바뀐 Mesh vertices 위치 재계산
// https://docs.unity3d.com/kr/current/ScriptReference/Mesh.RecalculateBounds.html

_mesh.RecalculateBounds();

2017년 1월 1일 일요일

Unity3D Android Build Error Case

빌드 에러가 나면 에러로그를 보고 수정하면 대부분의 문제는 해결이 된다.
쉽다면 쉬운 부분인데, 누군가에게는 도움이 되겠지 싶어서 작성한다.



유니티로 안드로이드 빌드 중 아래와 같은 에러가 나는 경우가 있다.
---------------

[에러로그]
Main manifest has <uses-sdk android:targetSdkVersion='23'> but library uses targetSdkVersion='24'

[원인]
지금 설치된 타겟 버전이 라이브러리가 사용하는 타겟버전보다 낮아서 생기는 문제


[해결방법]
Android SDK Manager 를 실행해서 해당 targetSdkVersion 으로 업데이트 하면 해결된다.
(SDK Dir/tools/android.bat)