블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2838)
Unity3D (886)
Script (94)
Extensions (16)
Effect (3)
NGUI (81)
UGUI (9)
Physics (2)
Shader (40)
Math (1)
Design Pattern (2)
Xml (1)
Tips (204)
Link (26)
World (1)
AssetBundle (25)
Mecanim (2)
Plugins (85)
Trouble Shooting (71)
Encrypt (7)
LightMap (4)
Shadow (4)
Editor (12)
Crash Report (3)
Utility (9)
UnityVS (2)
Facebook SDK (2)
iTween (3)
Font (18)
Ad (14)
Photon (2)
IAP (1)
Google (11)
URP (4)
Android (51)
iOS (46)
Programming (479)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (188)
협업 (64)
3DS Max (3)
Game (12)
Utility (140)
Etc (99)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (52)
Android (16)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (19)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday





출처 : http://www.slideshare.net/ndoors/2014-33402528

반응형
Posted by blueasa
, |

코루틴(Coroutine)++

Unity3D/Tips / 2015. 10. 19. 11:32

출처 : http://unityindepth.tistory.com/21


원문은 이곳에서 보실수 있습니다.



그는 코루틴으로 속임수를 쓴다.
그들은 실행되고,  왜 때때로 작동하지 않는가!!!
또, 컷 시퀀스를 만드는 방법과 강력한 기술을 사용하여 
오랫동안 실행시키는 방법에 대해서 배워 보자

목적


만약 코루틴에 대해서 확실하게 모르거나, 원하는 작업을 하고자 할 때 문제가 발생했다면 당신은 반드시 이 튜토리얼을 읽어야 한다.


코루틴은 다음과 같은 훌륭한 방법이다:

  • 특정 일을 단계적으로 발생하게 한다.

  • 시간이 흐름에 따라 발생하는 루틴을 작성할 수 있다.

  • 다른 연산이 완료될때까지 기다리는 루틴을 작성할 수 있다.
예를 들어, 컷 씬 시퀀스를 조직하는데 코루틴을 사용하는 것을 쉽게 생각할 수 있다. 혹은 단순히 적이 죽는 애니메이션을  기다린 다음, 재생성을 할 수 있을 것이다.

코루틴은 유니티의 매우 강력한 부분이지만, 종종 초심자에 의해서 이 주제에 대해 많은 오해를 받는다. 이 튜토리얼은 당신이 강력하고 융통성있는 코루틴을 파악하고, 그들이 어떻게 작동하는지 이해하는데 도움을 줄 것이다.


만약 단지 몇 초 동안 특정 연산을 지연시키기를 원한다면, Invoke를 사용하는 것을 고려해봐라. 물론 코루틴을 사용할 수는 있지만, 초보자들에게는 Invoke가 더 쉽다.

쓰레드와 코루틴


우선, 이들에 대해서 명확하게 하자, 코루틴은 쓰레드가 아니다. 코루틴은 비동기가 아니다
(not asynchronous).
(역자 주 : 비동기가 아니다라는 말은, 쉽게 말해서 동시에 발생하지 않는다는 뜻이다.)
쓰레드의 비동기와 동기의 개념이 잘 이해가 안된다면

쓰레드는 프로그램에서 다른 쓰레드와 함께 비동기로 실행된다. 멀티프로세서 기계에서, 쓰레드는 실제 다른 쓰레드와 함께 동시에 코드가 실행될 수 있다. 이는 쓰레드를 프로그래밍하는 것을 이해하기 복잡하게 만드는데, 왜냐하면 하나의 쓰레드는, 다른 쓰레드가 특정 부분을 읽고 있는 동시에, 그것을 변경할 수 있기 때문이다.

이는 더 복잡한데, 왜냐하면 당신이 작성한 코드는 컴파일러에 의해서 어셈블리어로 변경이되는데, 이는 다른 쓰레드가 당신의 소스코드의 한 부분을 처리하면서, 실제로 게임 중에 특정 부분을 변경할 수 있다는 것을 의미한다.이 때문에, 당신은 공유 메모리영역을 만들지 않거나, 공유된 자원을 읽거나 변경시키고 있을 때에는, 공유된 자원으로부터 다른 쓰레드를 잠궈버림으로서, 이런 상황을 발생시키지 않도록 하기 위해서 고생을 겪을 것이다.

쓰레드는 다음 글의 주제가 될 것이다.

그래서 코루틴이 무엇인가?


우리는 분명하게 코루틴이 쓰레드가 아니라는 것을 확실하게 했다. 이는 한번에 오직 하나의 코루틴이 실행되고, 게임의 주된 쓰레드에서 그것이 실행된다는 것을 의미한다. 사실, 한때 게임의 핵심 코드로 실행되는 것들 중 하나에 불과하다.


코루틴을 프로그래밍할 때, 당신은 절대 동기화와 특정 값을 잠금하는 것에 대해서 걱정할 필요가 없다. 당신의 코드에서 yield를 실행하기 전까지 완전한 통제를 할 수 있을 것이다.

그래서 여기 코루틴에 대한 정의가 나와있다:

코루틴은 부분적으로, 그리고 특정한 상황이 맞아 떨어졌을 때 실행되는 함수로써,
그 작업이 완료가 되기전까지, 미래의 어느시점에 재개될 수 있다.

유니티는 코루틴을 하나 혹은 여러개를 가지는 모든 객체에 대해서 게임의 모든 프레임마다 코루틴을 처리한다.
이 처리는 대부분의 yield 문에 대해서 Update가 끝나고, LateUpdate가 시작하기전에발생하는데, 그러나 여기 특별한 경우가 있다:

코루틴이 활성화되었을 때, 바로 다음 yield 문까지 실행될 것이고, 그것은 다시 시작될 때까지 일시정지할 것이다. 위에 다이어 그램을 통해서, 당신이 yield한 것을 기반으로 어디에서 재시작되는지 알 수 있을 것이다.


정말 간단한 코루틴을 보자:
1
2
3
4
5
6
7
8
IEnumerator TestCoroutine()
{
      while(true)
      {
           Debug.Log(Time.time);
           yield return null;
      }
}

이 코루틴은 명백하게 영원히 작동하는 루프를 가지고 있다. 이 코루틴은 현재 시간으로 로그를 남기고, 그 다음 yield한다. 다시 재개될 때, 다시 루프를 돌아서 로그를 남기고, 한번 더 yield될 것이다.

루프안에 있는 코드는 정확하게 Update 함수와 같다. 단지 Update 루틴이 실행된 후에(만약 Update문이 있다면), 모든 프레임마다 한번 실행이 되는 것이다.


StartCoroutine(TestCoroutine())를 호출할 때, 코드는 첫번째 yield를 만날때까지 즉시 실행되며,
유니티 프로세스가 이 객체에 대해서 코루틴을 처리할 때, 다시 재개된다.


Start, Update, OnCollisionEnter함수에서처럼 게임 객체의 처리 앞부분에 코루틴을 시작한다면, 코루틴은 즉시 첫번째 yield까지 실행될 것이고, 만약 yield return null을 사용했다면 같은 프레임 동안 다시 재개가 될 것이다. 만약 당신이 이것을 이해하지 못한다면 때로 이상한 효과를 초래할 수도 있다.

Start와 OnColiisionEnter를 코루틴으로 만드는 것은 문제가 되지 않는다.

한계를 넘어

자 이제 한가지 더 - 우리의 테스트 코루틴에서의 명백한 무한 루프는 무한하지 않다는 것이 판명되었다. 

만약 게임 객체에 대해서 코루틴을 중단하는 함수를 호출하거나, 객체가 파괴가 된다면, 이 무한 루프는 절대 다시 실행이 되지 않을 것이다. 또한 스크립트가 직접적으로 또는 SetActiveResursively(false)를 통해서 비활성화(disable)되면, 코루틴은 멈추게 될 것이다.

I Yield Sir

나는 마지막 섹션에 문장을 하나 만들었는데, 당신은 아마 의문이 들 것이다. 


하나 혹은 여러개의 코루틴을 가지는 게임내 모든 객체에 대해서 유니티는 매프레임마다 코루틴을 처리한다.
당신은 아마, 만약 yield return new WaitForSeconds(1) 같은 문장을 사용한다면, 그것은 1초동안 어떤 것도 처리하지 않기때문에  "오, 그렇지 않다" 라고 생각할지도 모른다. 

실제로 유니티는 매 프레임마다 올바른 시간이 경과되었는지 검사를 하면서, 코루틴을 처리한다.
- 이것은 당신의 코드에서 처리하지 않는다. 그러나 당신의 코드를 둘러 싸고 있는 랩퍼인 코루틴을 처리한다.

몇가지 값들을 yield함으로써 우리의 코드를 효과적으로 멈출수 있다는 것을 알았다. 여기에는 우리가 yield할 수 있는 것들이다.

  • null - Update구문의 수행이 완료될 때까지 대기한다.

  • WaitForEndOfFrame - 현재 프레임의 렌더링 작업이 끝날 때까지 대기한다.

  • WaitForFixedUpdate - FixedUpdate구문의 수행이 완료될 때까지 대기한다.

  • WaitForSeconds - 지정한 초만큼 대기한다.

  • WWW - 웹에서 데이터의 전송이 완료될 때까지 대기한다.
    (WaitForSeconds or null처럼 재시작한다.)

  • Another coroutine - 새로운 코루틴은 yielder가 재시작되기 전에 완료 될 것이다.


또한 yield break; 명령어를 실행할 수 있다. 이는 즉시 코루틴을 멈춘다.


WaitForEndOfFrame때문에,모든 카메라가 렌더링과 GUI의 출력이 완료되었을 때,  코루틴은 render texture로부터 정보를 얻는데 사용될 수 있다.
만약 Time.timeScale이 0으로 설정되어 있다면, yield return new WaitForSeconds(x)를 사용하는 것은 절대 재시작 되지 않는다.
물론, 이 모든 것들에 대해 가장 좋은 것은 특정 기간 동안 실행되는 코드를 작성하거나, 혹은 약간의 외부 이벤트가 일어나기를 기다리는 코드를 작성하고, 그것들을 당신의 코드를 훨씬 더 읽기 쉽게 만드는 하나의 함수 안에서 관리하는 것이다.(만약 여러 개의 함수를 작성해야 했거나, 상태를 확인하기 위해서 많은 코드를 작성해야 했다면)

요약

  1. 코루틴은 시간에 따라 혹은 외부의 처리가 완료되었을 때, 연산이 일어나는 순서를 정하는 정말 멋진 방법이다.

  2. 코루틴은 쓰레드가 아니다. 그리고 비동기가 아니다(동시에 일어나지 않는다.)

  3. 코루틴이 실행되고 있을 때, 다른 어떤 것들도 실행되지 않는다.

  4. 코루틴은 yield 문의 조건을 만족시켰을 때, 재개될 것이다.

  5. 코루틴은 스크립트가 비활성화(disabled)되거나, 객체가 파괴되었을 때, 비활성화 된다.

  6. yield return new WaitForSeconds는 Time.timeScale에 의해 영향을 받는다.

코루틴의 활용


바라건대, 우리는 코루틴이 무엇인지 그리고 그들이 어떻게 작동하는지 알아봤다. 우리의 상급 튜토리얼은 그들 뒤에 있는 기술에 대해서 살펴볼 것이다.

어떤 일을 하는 코루틴을 사용해보자. 몇몇 간단한 헬퍼 함수는 실제로 코루틴을 사용해서 쉽게 컷 시퀀스를 만드는 것을 도와준다.

우리는 물체를 목표 위치와, 회전값으로 움직이게하는 코루틴을 작성할 수 있다. 또 우리는 애니메이션이 일정 비율에 도달 했을 때까지 기다리는 코루틴을 작성할 수도 있다. 이 두가지 도구를 사용하여, 우리는 쉽게 하나의 함수로 전체 컷 시퀀스를 읽기 쉽게 스크립트 할 수 있을 것이다. 


코루틴에서 어떤 것을 움직일 때를 기다리는 것은, 동시에 객체의 위치를 조작하는 다른 코루틴 또는 업데이트 함수간의 충돌이 없다는 것을 보장한다.

당신은 오직 한번에 하나의 객체에 영향을 미치는 코루틴을 만들어야하고, 객체를 움직이게 하는 Update는 비활성화 시켜야 한다.

여기 애니메이션이 특정 부분 완료되기까지를 기다리는 코루틴의 예가 있다:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
//Wait for an animation to be a certain amount complete
IEnumerator WaitForAnimation(string name, float ratio, bool play)
{
    //Get the animation state for the named animation
    var anim = animation[name];
    //Play the animation
    if(play) animation.Play(name);
 
    //Loop until the normalized time reports a value
    //greater than our ratio.  This method of waiting for
    //an animation accounts for the speed fluctuating as the
    //animation is played.
    while(anim.normalizedTime + float.Epsilon + Time.deltaTime < ratio)
        yield return new WaitForEndOfFrame();
 
}

당신은 애니메이션을 기다리는 코루틴을 다음과 같이 작성할 수 있다.
01
02
03
04
05
06
07
08
09
10
11
IEnumerator Die()
{
       //Wait for the die animation to be 50% complete
       yield return StartCoroutine(WaitForAnimation("die",0.5f, true));
       //Drop the enemies on dying pickup
       DropPickupItem();
       //Wait for the animation to complete
       yield return StartCoroutine(WaitForAnimation("die",1f, false));
       Destroy(gameObject);
 
}

비디오는 당신에게 더 많은 것들을 보여준다. 예제 프로젝트는 여기서 얻을 수 있다.

비디오


만약 강력한 코루틴 도구를 어떻게 만들고, easing 함수를 적용하고, 코루틴을 다음 단계로 개발하는 방법을 알고싶다면, 반드시 이 비디오를 봐야한다.
이 비디오는 꽤 길지만, 그것은 정말 멋지다. 코루틴을 사용해서 전체의 컷 시퀀스를 만드는 방법을 배워라. 그리고 어떻게 easing 함수에 yield 문을 적용하는지를 봐라.

비디오의 끝 무렵에, 우리는 어떻게 고급 코루틴 도구를 만드는지와 멋진 효과를 만들기위해 그것들을 사용하는 방법에 대해 알게 될 것이다. 다운로드한 프로젝트는 비디오에서 보여주었던 모든 부분을 담고 있다.











반응형
Posted by blueasa
, |

[링크]


유니티5 업그레이드 가이드1 - AI


유니티5 업그레이드 가이드2 - Animation








[출처]

http://jinhomang.tistory.com/search/%EC%9C%A0%EB%8B%88%ED%8B%B05%20%EC%97%85%EA%B7%B8%EB%A0%88%EC%9D%B4%EB%93%9C%20%EA%B0%80%EC%9D%B4%EB%93%9C

반응형

'Unity3D > Tips' 카테고리의 다른 글

Animation(Legacy) 최적화  (0) 2015.11.16
코루틴(Coroutine)++  (0) 2015.10.19
[펌] Unity 추천 Asset 모음(2015/09)  (0) 2015.09.26
[펌] 유니티 최적화 관련 문서들 모음집  (0) 2015.09.08
Android Manifest File  (0) 2015.08.25
Posted by blueasa
, |

세이더/렌더링

Shader Forge

https://www.assetstore.unity3d.com/en/#!/content/14147

노드 베이스 세이더 편집 에디터. 간편하게 세이더를 만들 수 있어서 편리하다. 이것과 Substance Designer를 조합하면 마테리얼 작성은 문제가 없을 것 같다.(유료)

 

Skyshop: Image-Based Lighting Tools & Shaders 1.12.2

https://www.assetstore.unity3d.com/jp/#!/content/8880

모바일에서 미려한 렌더링을 싼 가격으로 하고 싶을 때 좋을 세이더 시스템.(유료)

 

UBER - Standard Shader Ultra

https://www.assetstore.unity3d.com/en/#!/content/39959

Unity 5의 Standard 세이더 확장판. SSS를 쓰거나 DX11용 세이더가 있다면 퀄리티 높은 표현을 간단하게 할 수 있다.(유료)

 

SE Natural Bloom & Dirty Lens

https://www.assetstore.unity3d.com/en/#!/content/17324

블룸 효과라면 이것. 아주 간단하게 예쁘게 빛나는 효과를 표현할 수 있다.(유료)

 

Vectrosity

https://www.assetstore.unity3d.com/en/#!/content/82

라인 렌더링이 필요하다면 이것. 와이어 프레임 표현 등에 쓸 수 있다.(유료)

 

Global Illumination Proxy

https://www.assetstore.unity3d.com/en/#!/content/21197

런타임에서 사용할 수 있는 실시간 GI을 실현하는 에셋. 모바일에서도 사용할 수 있고, 프로시저 모델에도 사용할 수 있는 뛰어난 물건.(유료)

 

 

 

모델링

Mega-Fiers

https://www.assetstore.unity3d.com/en/#!/content/644

모델의 디포 메이션을 할 수 있다. 특히 편리한 것은 Point Cache 데이터 임포트 기능. 3D 모델에서 디 포맷을 사용한 애니메이션의 임포트가 가능하다.(유료)

 

Procedural Toolkit

https://www.assetstore.unity3d.com/en/#!/content/16508

런타임에 메쉬를 만들 필요가 있을 때 편리한 라이브러리. 편리한 도우미 클래스가 몇 가지 있다.(무료)

 

ObjReader

https://www.assetstore.unity3d.com/en/#!/content/152

스탠드얼론 플랫폼에서 사용할 수 있다. OBJ 데이터를 런타임에서 읽을 수 있는 에셋.(유료)

 

 

 

네트워크

Best HTTP (Pro Edition)

https://www.assetstore.unity3d.com/en/#!/content/10872

Unity에서 REST 통신을 하고 싶을 때 이것을 택했다. 간단하고, 현재 오류 없음.(유료)

 

Bundle Manager

https://www.assetstore.unity3d.com/en/#!/content/14035

에셋 번들 작성·관리에 사용하고 있다. 코드가 필요 없으므로 편리.(유료)

 

Parse

https://www.assetstore.unity3d.com/en/#!/content/11119

mBaaS인 Parse.com의 Unity용 플러그 인. 편리하지만 Twitter 연휴 등 원하는 기능이 없기도 한다.(무료)

 

 

UI

Easy Touch : Touchscreen & Virtual Controls

https://www.assetstore.unity3d.com/en/#!/content/3322

특히 모바일 프로젝트에서 유용. 제스추어 기능이나 콘트롤러 등의 작성·이벤트 관리가 간단하다.(유료)

 

iTween

https://www.assetstore.unity3d.com/en/#!/content/84

UI나 오브젝트 애니메이션 할 때 쓸 수 있다. 문서는 적지만 편리하다. 샘플집(https://www.assetstore.unity3d.com/en/#!/content/18388 유료)도 있으므로, 이것과 함께 있다고 활용법이 알기 쉽다.(무료)

 

Picker for uGUI

https://www.assetstore.unity3d.com/en/#!/content/31412

Unity 기본 GUI를 Picker를 재현하고 있다. 매우 편리하다.(유료)

 

Unity Sample: UI

https://www.assetstore.unity3d.com/en/#!/content/25468

Unity UI의 샘플집. 여러 가지 사용법을 알 수 있어서 편리하다. 가져올 때는 패키지에 프로젝트 설정 파일 등도 포함되어 있으므로 주의.(무료)

 

New UI Widgets

https://www.assetstore.unity3d.com/en/#!/content/27226

아코디온이나 콤보 박스와 같은 기본 uGUI에는 없는 GUI 위젯이 많이 들어 있다. 모두 다루기 쉽고 디자인도 바꾸기 쉬워서 편리하다.(유료)

 

UBlur

https://www.assetstore.unity3d.com/en/#!/content/37840

모바일에서도 사용할 수 있는 UI 패널의 배경을 흐릿하게 하기 위한 플러그 인. IOS에서 자주 볼 수 있는 배경이 흐릿해진 UI을 쉽게 만들 수 있다.(유료)

 

 

 

에디터

Playmaker

https://www.assetstore.unity3d.com/en/#!/content/368

노드 기준으로 게임 객체의 컨트롤이 가능하다. Git에서 관리하지 못하는 등의 단점이 있지만 신속하게 프로토 타입을 만들고 싶은 경우에는 빼놓을 수 없다.(유료)

 

The Cinema Suite

https://www.assetstore.unity3d.com/en/#!/content/22171

리얼한 카메라 셋팅을 그대로 쓰거나(F 값 등) 시네마틱 장면을 컨트롤하기 위한 타임 라인 컨트롤이 가능. 영화적 표현을 하려면 필수적이라고 말할 수 있다.(유료)

 

 

 

유틸리티

JSON .NET For Unity

https://www.assetstore.unity3d.com/en/#!/content/11347

JSON.NET을 Unity로 쓰도록 하기 위한 에셋 데이터 관리에 자주 쓴다.(유료)

 

Runtime Serialization for Unity

https://www.assetstore.unity3d.com/en/#!/content/36879

클래스의 인스턴스는 당연하고 씬을 통째로 시리얼라이즈 해서 저장할 수 있는 에셋. 비동기로 시리얼라이즈 할 수 없는 것이 아쉬운 점이지만 편리하다.(유료)

 

Easy Save - The Complete Save & Load Asset for Unity

https://www.assetstore.unity3d.com/en/#!/content/768

Unity에서 세이브·로드를 쉽게 하기 위한 에셋.(유료)

 

Math Library for Unity

https://www.assetstore.unity3d.com/en/#!/content/14912

게임에서 흔히 쓰이는 기하 학계의 메소드(인터 섹트 등)이 많이 들어 있다(유료)

 

 

 

네이티브 기능

Mobile Social Plugin

https://www.assetstore.unity3d.com/en/#!/content/15066

IOS나 Android에서 트위터나 페이스북 등 소셜계 기능을 추가하고 싶을 때에 편리. 업데이트도 자주 행해지고 있고, 서포트도 빠르다.(유료)

 

Mobile Native PopUps

https://www.assetstore.unity3d.com/en/#!/content/15066

모바일 네이티브 팝업을 사용하기 위해서 도입. IOS, Android 동시에 사용할 수 있어서 편리하다.(무료)

 

UniRate

https://www.assetstore.unity3d.com/en/#!/content/10116

모바일 앱에 평가 독촉 기능을 넣기 위한 에셋. 쉽다.(유료)

 

Gallery Screenshot

https://www.assetstore.unity3d.com/en/#!/content/7827

IOS/Android용 스크린 캡처+화상 앨범에 저장 기능. 깔끔하고 편리하다.(유료)

 

 

 

출처: http://qiita.com/jhorikawa/items/410ecdc1addd04201fbf



출처 : http://jacking.tistory.com/1359

반응형

'Unity3D > Tips' 카테고리의 다른 글

코루틴(Coroutine)++  (0) 2015.10.19
[링크] 유니티5 업그레이드 가이드  (0) 2015.10.10
[펌] 유니티 최적화 관련 문서들 모음집  (0) 2015.09.08
Android Manifest File  (0) 2015.08.25
Unity Editor command line arguments  (0) 2015.08.12
Posted by blueasa
, |

문서들을 여기 저기 따로 공유하려느 번거로워서 유니티 최적화 관련 문서들을 모아두었습니다. 정리는 두서 없이 했고,다만 출처가 유니티 크루인지 아닌지로만 분류하였습니다. 추가적으로 발견하는 대로 지속적으로 갱신 할 예정입니다.


From Unity


from Developers


출처 : http://ozlael.tistory.com/32

반응형
Posted by blueasa
, |

Android Manifest File

Unity3D/Tips / 2015. 8. 25. 15:37


링크1 : http://android007.tistory.com/8

링크2 : http://hyeonstorage.tistory.com/151

반응형
Posted by blueasa
, |

Command line arguments

Unity 편집기를 그것이 연 상태로 특정 태스크를 실행하도록 만들기 위해서 커맨드 라인 아규먼트와 함께 시작하는 것이 가능합니다. 이것은 자동적인 게임 빌드, 테스트 스윗 등등을 허용합니다. below를 살펴보시기 바랍니다.

게다가 Unity와 함께 구축되어 있는 혼자하는 게임은 어떤 커맨드 라인 파라미터를 허용합니다. below를 살펴보시기 바랍니다.

editor

Unity Editor command line arguments

-batchmode

Unity를 batch 모드에서 실행합니다. 이것은 항상 그것이 어떠한 팝업 윈도우도 나타나지 않도록 함에 따라 그리고 어떠한 사람의 개입의 필요를 제거함에 따라 다른 커맨드 라인 아규먼트와 함께 결합되어 사용되야 합니다. 스크립트 코드의 실행 동안에 하나의 예외가 발생할 때 에셋 서버 업데이트는 실패하거나 또는 다른 오퍼레이션 들도 실패하고 Unity는 즉시 1을 리턴 코드로 하고 종료합니다.

Batch 모드에서 Unity는 그것의 로그가 콘솔로 나가는 버전을 쓸 것입니다. 완전한 디버그 정보를 위해서 Unity의 Log Files를 보시기 바랍니다.

-quit

다른 커맨드 라인 아규먼트의 실행을 끝내면서 Unity를 깨끗하게 멈춥니다.

-buildWindowsPlayer

혼자서하는 윈도우즈 플레이어를 구축합니다 (예 -buildWindowsPlayer path/to/your/build.exe).

-buildOSXPlayer

혼자서하는 윈도우즈 플레이어를 구축합니다 (eg, -buildOSXPlayer path/to/your/build.app).

-importPackage //packagepath//

주어진 package를 불러옵니다. 어떠한import 다이아로그도 보여지지 않습니다.

-createProject //pathname//

주어진 경로에 빈 프로젝트를 생성합니다.

-projectPath //pathname//

주어진 경로에 프로젝트를 오픈 합니다.

-assetServerUpdate //IP[:port] projectName username password [r <revision>]//

IP:port에 의해 주어진 Asset Server 에서 프로젝트의 업데이트를 강요합니다. 포트는 선택적이로 주어지지 않았다면 그것은 스탠다드 원(10733)이 되도록 가저됩니다. 사용자가 옳은 프로젝트와 작업하고 있다는 것을 확신시키기 위해서 -projectPath 아규먼트와 함께 결합된 이 명령을 사용하는 것은 충고될 수 있습니다. 프로젝트 이름이 주어지지 않으면 Unity에서 열어진 마지막 프로젝트가 사용됩니다. -projectPath에 의해 주어진 경로에서 프로젝트가 존재하지 않으면 하나가 자동적으로 생성됩니다.

-executeMethod //ClassName.MethodName//

Unity가 시작되자마자static method를 실행하고 선택적인 에셋 서버 업데이트가 실행된 후에 프로젝트 폴더는 열려집니다. 이것은 계속적인 통합을 하기 위해 사용될 수 있습니다 : Unit 테스트, 빌드 만들기, 데이터 준비하기. 사용자가 커맨드 라인 프로세스로부터 에러를 리턴하고 싶다면 사용자는 Unity가 1과 함께 종료하도록 하는 예외를 던지거나 또는 0이 아닌 코드와 함께EditorApplication.Exit를 콜합니다.

-executeMethod를 사용하기 위해서 _사용자는 편집기 폴더의 스크립트와 클래스의 static 함수를 가질 필요가 있습니다_.

// C# example
using UnityEditor;
class MyEditorScript
{
     static void PerformBuild ()
     {
         string[] scenes = { "Assets/MyScene.unity" };
         BuildPipeline.BuildPlayer(scenes, ...);
     }
}
// JavaScript example
static void PerformBuild ()
{
    string[] scenes = { "Assets/MyScene.unity" };
    BuildPipeline.BuildPlayer(scenes, ...);
}

-exportPackage

주어진 경로에서 하나의 패키지를 export 합니다. _ 사용법:_ -exportPackage exportAssetPath exportFileName
_Where:_ _exportAssetPath:_ unity 프로젝트에서 export하는 폴더입니다 
_exportFileName:_ 패키지 이름입니다 

현재 그것은 전체 폴더만을 export하는 것을 지원합니다.

-nographics //(Windows only)//

Batch 모드에서 실행할 때 그래픽 디바이스를 초기화하지 않아야 합니다. 이것은 GPU를 가지지 않는 기계 위에서 사용자의 자동 워크플로우를 실행하도록 하는 것을 가능하게 합니다.

Example usage

Back 모드에서 Unity를 실행합니다. MyEditorScript.MyMethod 메서드를 실행하고 완료시 종료합니다.

_Windows:_
C:\program files\Unity\Editor>Unity.exe -quit -batchmode -executeMethod MyEditorScript.MyMethod

_Mac OS:_
/Applications/Unity/Unity.app/Contents/MacOS/Unity -quit -batchmode -executeMethod MyEditorScript.MyMethod

Batch 모드에서 Unity를 실행합니다. 주어진 프로젝트 경로를 사용하고 에셋 서버로부터 업데이트 합니다. 모든 에셋이 다운로드 되어지고 에셋 서버로부터 불려진 후에 주어진 메서드를 실행합니다. 메서드가 실행을 마치면 자동적으로 Unity를 종료합니다.

/Applications/Unity/Unity.app/Contents/MacOS/Unity -batchmode -projectPath ~/UnityProjects/AutobuildProject -assetServerUpdate 192.168.1.1 MyGame AutobuildUser l33tpa33 -executeMethod MyEditorScript.PerformBuild -quit

player

Unity Standalone Player command line arguments

Unity와 함께 구축된 혼자서하는 플레이어는 커맨드 라인 아규먼트를 이해합니다:

-batchmode

게임을 "headless" 모드로 실행합니다. 게임은 어떤 것도 보여주지 않을 것이면 사용자 입력을 허용하지 않을 것입니다. 이것은networked games의 실행하는 서버를 위해서 대부분 유용합니다.

-force-opengl //(Windows only)//

심지어Direct3D가 가능할 때도 게임이 렌더링을 위해서OpenGL을 사용하도록 만듭니다. 보통Direct3D이 사용됩니다; 그리고Direct3D 9.0c이 가능하지 않는 경우에만OpenGL이 사용됩니다.

-single-instance //(Windows only)//

게임의 한 인스턴스가 한 번에 실행되도록 합니다. 또다른 게임이 벌써 실행되고 있다면 그것을 -single-instance와 함께 다시 시작하는 것은 기존에 존재하고 있는 것에 포커스를 둘 것입니다.

-nolog //(Windows only)//

Output 로그를 생성하지 않습니다. 주로 output_log.txt는 실행될 수 있는 게임 옆에 *_Data 폴더에 씌여집니다. 거기서Debug.Log 결과는 프린트 됩니다.

-force-d3d9-ref //(Windows only)//

Direct3D의 "Reference" 소프트웨어 렌더러를 사용해서 게임을 실행하도록 만듭니다. DirectX SDK는 이것이 작동하도록 하기 위해서 설치될 필요가 있습니다. 이것은 자동 테스트 스윗을 만들기 위해 매우 유용합니다. 거기서 사용자는 렌더링이 무슨 그래픽 카드이냐에 상관없이 정확하게 같은 것을 하는 것을 확실시하고 싶어합니다.

-adapterN //(Windows only)//

게임이 또다른 디스플레이에서 전체 스크린으로 실행되도록 허용합니다. 거기서 N은 디스플레이 숫자를 의미합니다.

-popupwindow //(Windows only)//

윈도우는 팝업 윈도우로서 생성될 것입니다 (프레임 없이).



출처 : http://openwiki.kr/unity/commandlinearguments

반응형
Posted by blueasa
, |

안드로이드에서 사운드 지연 문제 이슈와 해결 방법으로 올라와 있어서 링크 해 놓음..



참조1 : http://www.gamecodi.com/board/zboard.php?id=GAMECODI_Talkdev&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=3294


참조2 : http://tsubakit1.hateblo.jp/entry/2015/05/19/011835




If you're developing mobile games for Android, you've probably noticed ridiculous sound delay on some devices. 
No more. With this plugin, your sounds will play almost immediately. Check out this demo video:


Features:

- Play in-game sounds without any delay on Android devices
- Simultaneous playback of several sounds
- All kinds of Android built-in audio file formats are supported
- Plugin uses Android Sound Pool for managing and using sound files
- Doesn't conflict with Unity sound system

It works by issuing direct calls to the Android OS, bypassing everything that Unity has in its audio system. It means that sounds won't be affected by distance, Doppler, project volume settings etc, which is perfectly acceptable for most of the Android games. In our game, music is played by Unity and short sounds are managed by this plugin, with no issues. 

Usage is simple: 
- Send filename of sound and get its ID's with AudioCenter.loadSound(path_to_file) method
- Play it with AudioCenter.playSound(sound_id) method
- Unload it with AudioCenter.unloadSound(sound_id) method to save memory
For more detailed instructions, refer to the .pdf, supplied with the plugin.

Download it directly from our website: http://catsknead.me/static/plugin.zip

In the archive you'll find .unitypackage, .pdf with detailed instructions, .java file, containing full source of the Android-side of the plugin and a test scene, in which you can compare two playback methods. 
If you see no sound delay in the provided example scene - you probably have a lucky device, try another one :)

Coming to the Asset Store soon.



출처 : http://forum.unity3d.com/threads/android-sound-latency-fix.319943/

반응형

'Unity3D > Tips' 카테고리의 다른 글

Android Manifest File  (0) 2015.08.25
Unity Editor command line arguments  (0) 2015.08.12
iOS Native 관련..  (0) 2015.05.12
Scene뷰에서 Handles.Label()  (0) 2015.05.08
[링크] 유니티5 업그레이드 가이드  (0) 2015.03.30
Posted by blueasa
, |

iOS Native 관련..

Unity3D/Tips / 2015. 5. 12. 01:52

[링크]

http://www.gamecodi.com/board/zboard.php?id=GAMECODI_Talkdev&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=3280

반응형
Posted by blueasa
, |

Unity编辑器类在Scene下显示Lable文字




[csharp] view plaincopy
  1. 在Editor文件夹中创建代码如下  
  2.   
  3. using UnityEngine;  
  4. using System.Collections;  
  5. using UnityEditor;  
  6.   
  7.   
  8. [CustomEditor(typeof(Arraw))]  
  9. public class HandlerTest : Editor {  
  10.   
  11.     Vector3[] positions;  
  12.   
  13.     void OnSceneGUI()  
  14.     {  
  15.         float width = HandleUtility.GetHandleSize(Vector3.zero) * 0.5f;  
  16.         Arraw arraw = (Arraw)target;  
  17.   
  18.         Handles.Label( arraw.transform.position + Vector3.up * 1.5f, arraw.transform.position.ToString()+ "\nAAAA");   //绘制文字, 参数1 为坐标,参数2 为要显示的文字  
  19.    
  20.         if (GUI.changed)  
  21.         {  
  22.              EditorUtility.SetDirty(arraw);  
  23.         }  
  24.   
  25.     }  
  26. }  
  27.   
  28.   
  29.   
  30. Arraw脚本如下,将其拖拽到需要绘制Label的对象上即可  
  31. using UnityEngine;  
  32. using System.Collections;  
  33.   
  34. public class Arraw : MonoBehaviour {  
  35.   
  36.     public float shieldArea = 5;  
  37.   
  38. }  


출처 : http://blog.csdn.net/liqiangeastsun/article/details/42175199

반응형
Posted by blueasa
, |