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

카테고리

분류 전체보기 (2794)
Unity3D (852)
Programming (478)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (185)
협업 (11)
3DS Max (3)
Game (12)
Utility (68)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday




반응형
Posted by blueasa
, |









라식
안경이 귀찮아서 각막을 깎아 오목하게 만들어 생체 안경을 만들어 주는 수술

미세각막 절개도 또는 레이저를 이용하여 각막 앞부분을 분리, 절편을 만들어 젖힌후 각막을 깍는다.
깎는 양은 도수에 따라 다르다.
뚜껑만드는 일은 셀로판지 정도의 두께를 칼로 포를  뜨는 일이다. 아주 어렵다.
기계로 하지만, 사람손으로 잡고 한다.
압력이 풀리고 두껑이 쪼가리 나는 경우가 있다.
뚜껑을 만들때 실제 계획한거 보다 더 두꺼운 뚜겅을 만들고 깎고 남은 각막이 너무 작아진다.
BED가 200도 안남게 되는 경우가 발생한다 결국 각막이 붕괴가 일어난다.



안내 렌즈 삽입술

내피세포의 줄어들 개연성이 높다 아주 위험한 수술

미국이나 유럽에서는 쉽게 하지 않는다.

위험을 감수하고 받는 수술





각막
백인 : 550M마이크론
한국인 : 520M
흑인 : 500M

피부가 두꺼운 사람은 각막도 두껍다. 피부의 연결
백인은 멜라닌색소가 없어 피부를 보호하기 위해서 피부가 두껍다. 코끼리피부
반대로 흑인은 비단결이다. 멜라닌 색소 풍부.
각막은 재생이 안된다.


 

각막구조
각막상피 : 50M, 때처럼 벗겨져 나가고 재생된다.
보우만박 : 혈관이 있으면, 시야에 항상 혈관이 보이게 된다
               혈관대신 산소를 공급해주는 역활을 한다.
               재생이 된다.
각막내피 : 10M, 재생이 안된다. 하나가 세포가 죽게 되면 옆에 놈이 대신한다.
               결국 밀도 가 떨어지게 된다.
               밀도가 떨어지면 부기가 잘안빠지고, 이로 인해 실명할수도 있다.


 
깎는양
미국 : 50M
한국 : 80M
뚜껑 : 150M,
520m - (150M+80M) = 290M

520M은 평균이기 때문에 정상인중에 각막이 얇은 사람은 400M부터 시작
뚜껑포함 정상의 최소치인 400M만(150M+250M) 남기자.
생체조직에 하다보니, 실제로는 200M도 남기지 않았다.
그래서, 270M~ 300M을 남길려고 하고, 보수적인의사는 320M을 남길려고한다.


 

레이저로 뚜껑만들기
ㅇㅇ
ㅇㅇ
ㅇㅇ
ㅇㅇ
130M~150M뚜껑을 만든다.
레이저가 맞지 않은 부위가 생긴다. 일종의 우표현상
1/10로 만들면 분리가 안됨, 현재는 30%작게 사용
이정도의 울퉁불퉁한건 감소하자. 이쁘게 되지는 않는다.
각막이 단백질이다 보니, 화상을 입히고 단백질 변성을 가져온다.
이런 문제로 숙련된 의사는 칼로 깍는 장비를 선호

레이저는 10x개의 렌즈와 미러를 통과하는동안 10%~20%의 남고, 이에너지를 사용하게된다.
악기도 연주전에 튜닝을 하듯이 사람눈에 사용하기 전에 0점 조절을 해야 한다.
이 튜닝과정에서 돈과 시간이 들어가고 1시간에 1~2명 밖에 못한다.

현실에서는 과대경쟁으로 수술을 많이 못하면 파산을 할수밖에 없다.
그래서, 모아놓고 수술을 하더라. 이게 아주 위험하다.

 

라섹
시력이 좋지 않아서 각막을 많이 깎아야 하는 사람을 위해서 개발
뚜껑을 만들지 않고 깍는다. 그래서, 50M가 더 남는다.
보우만막도 깎는데, 재생되는 5일~1주일의 시간이 필요
신경부분이 있어서 좀 아프다.
많이 깎아 세포증식이 일어날수 있는데, 혼탁으로 나타나고 보이지 않게 된다.
세포증식을 막기위해 항암제를 사용하고, M라섹이라고 한다.
항암제는 그자체로 다른 부작용이 있을수 있다.

시력이 좋지 않아 많이 깎는 사람은 항암제를 사용하는 편법까지 해야 하지만,
라식도 받을수 있는 4D옵터 전후는 뚜껑 안만들고 라섹하는게 좋다. 



반응형
Posted by blueasa
, |

[은수저] 남자의 가치

Thinking / 2013. 8. 30. 22:37

출처 : 애니메이션 '은수저' 중..







반응형
Posted by blueasa
, |

 

[추가]

아래 이미지 클릭이 안되는 것 같습니다. 파일로 올렸으니 파일을 받아주세요.

TouhouProject_Wallpaper.jpg
2.63MB

 

[주의] 이미지 클릭해서 원본 크기로 보이는 상태에서 저장하세요~

 

 

 

 

출처 : http://minus.com/mwp-animedual

 

 

[적용한 바탕화면]

 

 

반응형

'Wallpaper' 카테고리의 다른 글

Wallpaper  (0) 2010.07.11
Posted by blueasa
, |



링크 : http://www.booncotter.com/unity-prefactory-a-better-pool-manager/


참조 : http://forum.unity3d.com/threads/127997-Prefactory-Free-PoolManager-PoolObject-System

반응형

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

Mobile Movie Texture  (0) 2013.12.03
원격 로그 플러그인  (0) 2013.11.20
IronPython  (0) 2013.10.06
UniPython  (0) 2013.10.06
iOS 플러그인 제작  (0) 2013.09.15
Posted by blueasa
, |



 

방금전에 한빛 소프트로부터 연락을 받았습니다.

 

두달전에 게임뮤지엄에서 출시한 유엔아이가 한빛 소프트에서 특허를 내 놓은 게임 플레이 방식을 침해하고 있기에 특허료를 내던지 게임 서비스를 내리던지 하라고 하더군요.

 

자신들의 특허는 

1. 한대의 단말기로 2인 이상이, 화면 분할 방식등으로 플레이하는 방식이며 모든 플랫폼에 적용된다.

2. 단 이 특허는 국내에서만 적용된다.

 

황당해서,

 

그럼 특허 내 놓으신 방식으로 발매하신 게임이 있으십니까?

한대의 폰으로 두명 이상이서 즐기는 방식의 게임은 외국에는 이미 전부터 있는 방식입니다.

 

라고 물어보니, 

"발매한 게임은 아직 없다."

"국내 특허이기에 국내에서만 적용된다." 라고 말을 하더군요.

 

다른 분야 쪽에서 특허 장사를 한다는 이야기는 많이 들어 봤습니다만..

표현력과 창작력이 생명인 게임 업계 쪽에서 이런 식으로 상용화 시키지도 않은 채로 자신들만의 아이디어인냥 특허만 따 놓고 기다리다가 누군가가 건드리면 너 잘걸려 들었다! 라고 특허권을 들이미는 것은.. 

 

대기업이 특허권이란 명목으로 중소 개발업체들의 손발과 같은 표현력을 묶어 버리는것과 같은 일이라고 생각됩니다.

 

법인지라, 끝까지 가 보고..

접어야 한다면 국내 서비스를 접고 해외 서비스만 하던지 할 계획입니다.

 

그들의 특허권을 명백히 침해 하였다면, 특허료를 내는 것도 방법의 하나이겠습니다만..

 

국내 개발자들의 표현의 자유를 구속시키는 장삿속에 첫타자로 나서서 굴복하고 싶지 않습니다.

 

마지막으로,

 

게임을 사랑하시는 여러분들께 한가지 부탁의 말씀이 있습니다.


이 포스팅 최대한 스크랩을 해 가시던지 퍼뜨려 주시면 감사하겠습니다.

 

이유는, 


첫번째로, 둘이서 폰 하나로 하는 표현 방식으로 앞으로 국내에서 유엔아이보다 더 재미있고 훌륭한 게임들이 나올 수 있고 그것을 유저들이 즐길 수 있는 자유를 대기업이 침해하지 말아줬으면.. 하는 바램

 

두번째로는, 지금 저희와 같은 게임을 개발중인 회사가 있다면 이런 일이 있으니 이를 미리 준비 하고 있으셔야 할 것이라는 바램..

때문입니다.

 

세번째로는, 밖에 나가서 명함 내밀면서 저희는 게임 회사입니다. 라고 말하는 회사라면..

이런 일보다는 어떻게하면 재미있는 게임으로 유저들에게 행복을 줄 수 있을까? 라는 게임 개발자가 할 수 있는 가장 건설적인 생각에 몰두해 주시길 바라는 마음이 간절하기 때문입니다.

 

가능한한 스크랩 많이 해 주시면 감사하겠습니다.

 

2013년 8월 21일

게임 뮤지엄 대표

전 성구 올림

 [출처] 게임뮤지엄의 유엔아이가 특허권을 침해했다고 하는군요.|작성자 게임기 컬렉터


반응형
Posted by blueasa
, |








출처 : 애니메이션 [우주형제] 한 장면..

반응형

'Thinking' 카테고리의 다른 글

[진격의 거인] 아무것도 버릴 수 없는 사람은..  (0) 2013.09.29
프로그래머 죽이기  (0) 2013.09.26
에버노트 CEO 필리빈의 말.  (0) 2013.09.24
[Servant X Service] 과소평가  (0) 2013.09.06
[은수저] 남자의 가치  (0) 2013.08.30
Posted by blueasa
, |

출처 - http://docs.unity3d.com/Documentation/Manual/iphone-playerSizeOptimization.html -


iOS 플레이어 빌드 사이즈 최적화 하기.

빌드 사이즈를 줄이는 방법은 크게 두 가지가 있습니다. Xcode에서 Active Build Configuration을 조절하는 방법과 Unity에서 Stripping Level을 조절하는 방법입니다.

 

Relese Mode로 빌드 하기.

Xcode에서 빌드 할 때Active Build Configuration 드롭다운 메뉴에서 Debug 와 Release 옵션을 선택할 수 있습니다. Debug Mode 대신 Release Mode로 빌드를 하면 게임에 따라서 2-3MB 정도의 빌드 크기가 줄어듭니다.

1.jpg

The Active Build Configuration drop-down -

Release Mode로 빌드를 하게 되면 Debug 정보 없이 빌드를 하기 때문에게임이 크래쉬가 발생하거나 다른 문제가 생겼을 때 Stack Trace 등의 정보를Output으로 확인할 수가 없습니다

제작이 완료돼서 배포를 하는 게임의 경우에는 문제가 되지 않겠지만개발 중에는 Debug Mode가 유용합니다.


iOS Stripping Level (Advanced License feature)

Stripping Level 을 조절해서 빌드 크기를 최적화 하는 방법은 아래와 같은 방법으로 진행이 됩니다.

1. Strip assemblies level: 스크립트의 Bytecode를 분석해서해당 클래스와 메소드가 참조가 되는지 여부를 확인하고참조되지 않는 부분은 DLL에서 제거되고, AOT 컴파일 단계에서 제외 됩니다이 최적화 방법은 Main binary의 크기와 수반되는 DLL을 줄이는 방법으로리플렉션을 사용하지 않는 한 안전한 방법입니다.

2. Strip ByteCode level: (Data 폴더에 저장되는)모든 .Net DLLmetadata strip되어 크기가 줄어듭니다모든 코드가 AOT 단계에서 미리 전처리(precompiled)가 되고, main binary에 링크가 되기 때문에 이 방법이 가능하게 됩니다.

3. Use micro mscorlib: 특별한 경우로, mscorlib smaller 버전을 사용하는 방법입니다.

이 라이브러리에서는 일부 컴포넌트가 제외된 버전입니다.

예를 들어, Security, Reflection.Emit, Remoting, non Gregorian calendars 등이 제외됩니다.

또한 내부 컴포넌트간의 상호의존성이 줄어들게 됩니다이 방법은 main binary mscorlib.dll의 크기를 줄이는 방법이지만 일부 System 및 System.Xml 어셈블리 클래스에서는 호환이 되지 않으니 주의를 해야 합니다.

 Level들은 축적이 됩니다다시 말해서, Level 3 최적화 방법은 Level 2  Level 1을 내포하고, Level 2 최적화 방법은 Level 1을 포함합니다.

주의: Micro mscorlib  core 라이브러리의 크기를 많이 줄인 버전입니다. micro mscorlib 를 사용할 때 가장 좋은 방법은 제작중인 어플리케이션에서 사용하지 않는 .Net 클래스와 기능들을 사용하지 않는 것입니다제외할 예로 GUID가 가장 좋은 예시가 될 것 같습니다. GUID를 직접 만들어서 대체 사용이 쉽고직접 제작해서 사용하는 경우 성능 면에서 앱 사이즈를 줄이는 면에서도 모두 좋은 결과를 낼 수 있습니다.


Tips

리플렉션을 사용할 때 Stripping 조절하는 방법

Stripping static code analysis에 많이 의존하는 방법이기 때문에효율적으로 진행이 되지 않는 경우가 종종 발생합니다.

한 예로 리플렉션과 같은 dynamic 기능이 사용되는 경우입니다이런 경우사용하거나 참조해야 하지 않는 클래스 등을 명시 하는 것이 필수적입니다.

유니티는 프로젝트 별로 따로 custom stripping blacklist를 지원합니다. blacklist를 사용하면 link.xml 파일을 생성하고 Assets 폴더에 두어야 합니다. link.xml 파일의 예제를 아래에서 확인할 수 있습니다보존(preservation)되어야 한다고 명시된 클래스들은 stripping에 영향을 받지 않게 됩니다.

<linker>

       <assembly fullname="System.Web.Services">

               <type fullname="System.Web.Services.Protocols.SoapTypeStubInfo" preserve="all"/>

               <type fullname="System.Web.Services.Configuration.WebServicesConfigurationSectionHandler" preserve="all"/>

       </assembly>

 

       <assembly fullname="System">

               <type fullname="System.Net.Configuration.WebRequestModuleHandler" preserve="all"/>

               <type fullname="System.Net.HttpRequestCreator" preserve="all"/>

               <type fullname="System.Net.FileWebRequestCreator" preserve="all"/>

       </assembly>

 </linker>

주의하지만 어떤 클래스가stripping 되어야 하고 어떤 클래스가 사용이 되어야 하는지를 판별하는 방법이 어려울 수 있기 때문에, Xcode 콘솔의 에러 메시지를 확인하고시뮬레이터에서 앱을 실행시켜서 그런 정보들을 확인하는 것이 필요할 수 있습니다.

최적화된 크기의 앱 배포를 위한 체크리스트

1. 에셋 줄이기텍스처에 PVRTC 압축 옵션을 활성화 하고 가능한 범위 내에서 해상도를 줄입니다또한압축되지 않은 사운드 에셋의 수를 줄입니다이 방법에 대한 추가 팁을 아래 링크에서 확인할 수 있습니다. (링크 - http://docs.unity3d.com/Documentation/Manual/ReducingFilesize.html)

2. iOS Stripping Level Use Micro mscorlib로 설정합니다.

3. 스크립트 호출 최적화Level Fast but no exceptions로 설정합니다.

(Script call optimization level)

4. System.dll System.Xml.dll 에 있는 기능들은 사용하지 않습니다

이 라이브러리들은 micro mscorlib에 호환되지 않는 것 들입니다.

5. 불필요한 code dependencies를 제거합니다.

6. API Compatibility Level .Net 2.0 subset으로 설정합니다.

하지만 .Net 2.0 subset은 다른 라이브러리들과의 호화성에 제한적인 부분이 있다는 점을 주의해야 합니다

7. Target platformarm6로 설정합니다. (OpenGL ES 1.1)

8. JS Arrays를 사용하지 않습니다.

9. 구조체를 포함해서 Value 타입과 조합해서 generic container를 사용 하는 것을 자제합니다.



반응형
Posted by blueasa
, |

[추가] 2024-04-17

#define으로 Editor, Device등 원하는 곳에 띄울 수 있게 약간 변형함

#if UNITY_EDITOR
#define MY_DEBUG
#endif

using UnityEngine;
using System.Collections;
using System;
using UnityEngine.Internal;


/// 
/// It overrides UnityEngine.Debug to mute debug messages completely on a platform-specific basis.
/// 
/// Putting this inside of 'Plugins' foloder is ok.
/// 
/// Important:
///     Other preprocessor directives than 'UNITY_EDITOR' does not correctly work.
/// 
/// Note:
///     [Conditional] attribute indicates to compilers that a method call or attribute should be 
///     ignored unless a specified conditional compilation symbol is defined.
/// 
/// See Also: 
///     http://msdn.microsoft.com/en-us/library/system.diagnostics.conditionalattribute.aspx
/// 
/// 2012.11. @kimsama
///

/// - Unity 5.x 대응(5.x에 추가된 Debug 함수 추가)
/// - isDebugBuild("Development Build") 시 return.
/// 2016-07-25 by blueasa

public static class Debug
{
    public static bool developerConsoleVisible
    {
        get { return UnityEngine.Debug.developerConsoleVisible; }
    }

    public static bool isDebugBuild
    {
        //get { return UnityEngine.Debug.isDebugBuild; }
#if MY_DEBUG
        get { return true; }
#else
        get { return false; }
#endif
    }

    public static ILogger logger
    {
        get { return UnityEngine.Debug.unityLogger; }
    }

    public static void Assert(bool condition)
    {
        if (false == isDebugBuild)
            return;

        UnityEngine.Debug.Assert(condition);
    }

    public static void Assert(bool condition, string message)
    {
        if (false == isDebugBuild)
            return;

        UnityEngine.Debug.Assert(condition, message);
    }

    public static void Assert(bool condition, object message)
    {
        if (false == isDebugBuild)
            return;

        UnityEngine.Debug.Assert(condition, message);
    }

    public static void Assert(bool condition, UnityEngine.Object context)
    {
        if (false == isDebugBuild)
            return;

        UnityEngine.Debug.Assert(condition, context);
    }

    public static void Assert(bool condition, string message, UnityEngine.Object context)
    {
        if (false == isDebugBuild)
            return;

        UnityEngine.Debug.Assert(condition, message, context);
    }

    public static void Assert(bool condition, object message, UnityEngine.Object context)
    {
        if (false == isDebugBuild)
            return;

        UnityEngine.Debug.Assert(condition, message, context);
    }

    public static void AssertFormat(bool condition, string format, params object[] args)
    {
        if (false == isDebugBuild)
            return;

        UnityEngine.Debug.AssertFormat(condition, format, args);
    }

    public static void AssertFormat(bool condition, UnityEngine.Object context, string format, params object[] args)
    {
        if (false == isDebugBuild)
            return;

        UnityEngine.Debug.AssertFormat(condition, context, format, args);
    }

    public static void Break()
    {
        if (false == isDebugBuild)
            return;

        UnityEngine.Debug.Break();
    }

    public static void ClearDeveloperConsole()
    {
        if (false == isDebugBuild)
            return;

        UnityEngine.Debug.ClearDeveloperConsole();
    }

    public static void DebugBreak()
    {
        if (false == isDebugBuild)
            return;

        UnityEngine.Debug.DebugBreak();
    }

    public static void DrawLine(Vector3 start, Vector3 end)
    {
        if (false == isDebugBuild)
            return;

        UnityEngine.Debug.DrawLine(start, end);
    }

    public static void DrawLine(Vector3 start, Vector3 end, Color color)
    {
        if (false == isDebugBuild)
            return;

        UnityEngine.Debug.DrawLine(start, end, color);
    }

    public static void DrawLine(Vector3 start, Vector3 end, Color color, float duration)
    {
        if (false == isDebugBuild)
            return;

        UnityEngine.Debug.DrawLine(start, end, color, duration);
    }

    public static void DrawLine(Vector3 start, Vector3 end, [DefaultValue("Color.white")] Color color, [DefaultValue("0.0f")] float duration, [DefaultValue("true")] bool depthTest)
    {
        if (false == isDebugBuild)
            return;

        UnityEngine.Debug.DrawLine(start, end, color, duration, depthTest);
    }

    public static void DrawRay(Vector3 start, Vector3 dir)
    {
        if (false == isDebugBuild)
            return;

        UnityEngine.Debug.DrawRay(start, dir);
    }

    public static void DrawRay(Vector3 start, Vector3 dir, Color color)
    {
        if (false == isDebugBuild)
            return;

        UnityEngine.Debug.DrawRay(start, dir, color);
    }

    public static void DrawRay(Vector3 start, Vector3 dir, Color color, float duration)
    {
        if (false == isDebugBuild)
            return;

        UnityEngine.Debug.DrawRay(start, dir, color, duration);
    }

    public static void DrawRay(Vector3 start, Vector3 dir, [DefaultValue("Color.white")] Color color, [DefaultValue("0.0f")] float duration, [DefaultValue("true")] bool depthTest)
    {
        if (false == isDebugBuild)
            return;

        UnityEngine.Debug.DrawRay(start, dir, color, duration, depthTest);
    }

    public static void Log(object message)
    {
        if (false == isDebugBuild)
            return;

        UnityEngine.Debug.Log(message);
    }

    public static void Log(object message, UnityEngine.Object context)
    {
        if (false == isDebugBuild)
            return;

        UnityEngine.Debug.Log(message, context);
    }

    public static void LogAssertion(object message)
    {
        //if (false == isDebugBuild)
        //    return;

        UnityEngine.Debug.LogAssertion(message);
    }

    public static void LogAssertion(object message, UnityEngine.Object context)
    {
        //if (false == isDebugBuild)
        //    return;

        UnityEngine.Debug.LogAssertion(message, context);
    }

    public static void LogAssertionFormat(string format, params object[] args)
    {
        //if (false == isDebugBuild)
        //    return;

        UnityEngine.Debug.LogAssertionFormat(format, args);
    }

    public static void LogAssertionFormat(UnityEngine.Object context, string format, params object[] args)
    {
        //if (false == isDebugBuild)
        //    return;

        UnityEngine.Debug.LogAssertionFormat(context, format, args);
    }

    public static void LogError(object message)
    {
        //if (false == isDebugBuild)
        //    return;

        UnityEngine.Debug.LogError(message);
    }

    public static void LogError(object message, UnityEngine.Object context)
    {
        //if (false == isDebugBuild)
        //    return;

        UnityEngine.Debug.LogError(message, context);
    }

    public static void LogErrorFormat(string format, params object[] args)
    {
        //if (false == isDebugBuild)
        //    return;

        UnityEngine.Debug.LogErrorFormat(format, args);
    }

    public static void LogErrorFormat(UnityEngine.Object context, string format, params object[] args)
    {
        //if (false == isDebugBuild)
        //    return;

        UnityEngine.Debug.LogErrorFormat(context, format, args);
    }

    public static void LogException(Exception exception)
    {
        //if (false == isDebugBuild)
        //    return;

        UnityEngine.Debug.LogException(exception);
    }

    public static void LogException(string exception)
    {
        Exception ex = new Exception(exception);
        UnityEngine.Debug.LogException(ex);
    }

    public static void LogException(Exception exception, UnityEngine.Object context)
    {
        //if (false == isDebugBuild)
        //    return;

        UnityEngine.Debug.LogException(exception, context);
    }

    public static void LogFormat(string format, params object[] args)
    {
        if (false == isDebugBuild)
            return;

        UnityEngine.Debug.LogFormat(format, args);
    }

    public static void LogFormat(UnityEngine.Object context, string format, params object[] args)
    {
        if (false == isDebugBuild)
            return;

        UnityEngine.Debug.LogFormat(context, format, args);
    }

    public static void LogWarning(object message)
    {
        if (false == isDebugBuild)
            return;

        UnityEngine.Debug.LogWarning(message);
    }

    public static void LogWarning(object message, UnityEngine.Object context)
    {
        if (false == isDebugBuild)
            return;

        UnityEngine.Debug.LogWarning(message, context);
    }

    public static void LogWarningFormat(string format, params object[] args)
    {
        if (false == isDebugBuild)
            return;

        UnityEngine.Debug.LogWarningFormat(format, args);
    }

    public static void LogWarningFormat(UnityEngine.Object context, string format, params object[] args)
    {
        if (false == isDebugBuild)
            return;

        UnityEngine.Debug.LogWarningFormat(context, format, args);
    }
}

 

 

 

----

Unity에서 프로그래밍할 때 콘솔에 디버깅이나 경고 혹은 에러 문자열 출력을 위해서 Debug.Log 의 메시지 출력 메소드를 많이 사용합니다. 
 
문제는 Debug.Log 메소드의 이름과 달리 해당 콘솔 출력이 디바이스에 deploy해서 실행할 때에도 실행이 된다는 점입니다. 
 
처음부터 Debug.Log 메시지를 대체하는 별도의 wrapper 클래스나 메소드를 작성해서 사용한 경우라면 문제가 되지 않지만, 프로젝트 내에 이미 수 많은 Debug.Log 메시지들이 존재하는 경우, 변경이 번거로울 수 있습니다. 
 
이 때 사용할 수 있는 간단한 방법이 .NET의 System.Diagnostics.Conditional 속성을 사용하는 것입니다.
 
public static class Debug
{ 
[System.Diagnostics.Conditional("UNITY_EDITOR")]
public static void Log (object message)
{
UnityEngine.Debug.Log (message);
}
}
 
전체 코드는 아래 링크의 gist에서 확인할 수 있습니다.
 
 
Debug 클래스에는 Debug.Log 뿐만 아니라 UnityEngine.Debug 클래스의 DrawLine, DrawRay 등을 포함한 모든 메소드들에 대한 대체 메소드들을 포함하고 있습니다.
 
사용 방법은 링크의 전체 코드를 Assets 폴더 내의 Editor 폴더에 저장하면 됩니다.
사용 방법은 링크의 전체 코드를 Assets 폴더 내의 Plugins 폴더에 저장하면 됩니다.

 

 

[출처] http://www.unitystudy.net/bbs/board.php?bo_table=writings&wr_id=60&page=0&sca=&sfl=&stx=&spt=0&page=0&cwin=#c_322

 

 

 

[추가][Unity 5.3 이상]

It works.
And, Unity 5.3 provides an easier solution: Debug.logger.logEnabled=false to disable it.



[출처] https://gist.github.com/kimsama/4123043

 

반응형
Posted by blueasa
, |

UnityVS가 드디어 Unity 콘솔창에서 더블클릭하면 라인 찾아가네요.


비록 Editor에 스크립트가 하나 들어가야 되지만..

지원하니 좋네요. =ㅅ=!!

Unity 4.2로 업그레이드 하면서 UnityVS에도 뭔가 있나하고 사이트 놀러갔다가 득템한 느낌이네요. ㅎㅎ



UnityVS 스크립트 소스 및 내용  링크 : http://unityvs.com/news/




[File] 


반응형

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

Visual Studio Tools for Unity 1.9(for Free)  (2) 2014.07.30
Posted by blueasa
, |