GameObject.active = true;

  • StartCoroutine : OK
  • Coroutine Method : OK
  • StopAllCoroutine : OK
  • Invoke : OK
  • InvokeRepeating : OK
  • CancelInvoke : OK


GameObject.active = false;

  • StartCoroutine : Error
  • Coroutine Method : Stop (active 상태에서 돌고 있는 상태였다면 정지된다.)
  • StopAllCoroutine : OK
  • Invoke : OK
  • InvokeRepeating : OK
  • CancelInvoke : OK

** 결론

  • StartCoroutine 으로 코루틴 메소드를 열심히 돌리다가 해당 GameObject 의 active 가 꺼지면 돌던 코루틴 메소드는 정지되고 다시 active 가 켜지더라도 재실행되지 않는다.....
  • 코루틴을 많이 사용하는 로직(Async 로 돌리는 함수들..(WWW, ... 같은...))에서는 꼭 염두해 두어야 한다..
  • OnDisable() {} 에서 관련 처리를 해 주는게 좋다.
  • Invoke 관련은 GameObject 의 active 유무랑 관계없이 돌아간다..

* Memory 해제 관련...

*. Prefab 을 public GameObject variable 로 연결하면 1개가 살아있다...
     - Resource 로 옮기고 Resource.Load 후 Instantiate 해준다음 Resource.UnloadUnusedAsset으로 로드했던 prefab을 해제시키자.


* Texture

- WWW 혹은 다른곳에서 load 한 texture 들은 사용하지 않을때 DestroyImmediate 로 꼭 해제시켜줘야 한다. DestroyImmediate 해주면 바로 memory 에서 해제된다.


*. GameObject Destroy 는 memory 를 바로 해제시키지 않는다.
     - Resource.UnloadUnusedAssets 를 해야 memory 에서 해제된다.
     - GameObject 를 DestroyImmediate 해도 포함되있는 Texture, material, 등은 memory에서 해제되지 않는다.

*. Load 한 Texture 들을 Member 로 가지고 있으면 GameObject Destroy 시 memory 해제 안된다.
     - Texture 는 개별 DestroyImmediate 하여 바로바로 해제하자.


출처: http://limchaeng.tistory.com/35




출처: http://gyuha.tistory.com/405


이전 버전을 계속 포스팅 했었는데, br태그가 이상하게 나온다거나.. tistory에서 사용 할 때 불편한 문제점들이 이것저것 있는데.. 아래 처럼 사용하면 좀 더 편하게 사용 할 수 있습니다.


먼저 최신 버전의 SyntaxHighlighter을 다운로드 받습니다. 


http://alexgorbatchev.com/SyntaxHighlighter/


압축을 풀면 아래와 같이 보입니다. 



여기서 scripts와 styles 폴더의 내용을 모두, 

관리자 화면 > 스킨 > HTML/CSS편집 > 파일 업로드에서 파일 업로드를 통해서 올려 줍니다.



추가 된 것을 확인 하시면,

관리자 화면 > 스킨 > HTML/CSS편집 > HTML/CSS편집에서 <title> 밑에 아래 코드를 추가해 줍니다.


<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js "></script>

<script type="text/javascript" src="./images/shCore.js"></script>

<script type="text/javascript" src="./images/shLegacy.js"></script>

<script type="text/javascript" src="./images/shBrushAppleScript.js"></script>

<script type="text/javascript" src="./images/shBrushAS3.js"></script>

<script type="text/javascript" src="./images/shBrushBash.js"></script>

<script type="text/javascript" src="./images/shBrushColdFusion.js"></script>

<script type="text/javascript" src="./images/shBrushCpp.js"></script>

<script type="text/javascript" src="./images/shBrushCSharp.js"></script>

<script type="text/javascript" src="./images/shBrushCss.js"></script>

<script type="text/javascript" src="./images/shBrushDelphi.js"></script>

<script type="text/javascript" src="./images/shBrushDiff.js"></script>

<script type="text/javascript" src="./images/shBrushErlang.js"></script>

<script type="text/javascript" src="./images/shBrushGroovy.js"></script>

<script type="text/javascript" src="./images/shBrushJava.js"></script>

<script type="text/javascript" src="./images/shBrushJavaFx.js"></script>

<script type="text/javascript" src="./images/shBrushJScript.js"></script>

<script type="text/javascript" src="./images/shBrushPerl.js"></script>

<script type="text/javascript" src="./images/shBrushPhp.js"></script>

<script type="text/javascript" src="./images/shBrushPlain.js"></script>

<script type="text/javascript" src="./images/shBrushPowerShell.js"></script>

<script type="text/javascript" src="./images/shBrushPython.js"></script>

<script type="text/javascript" src="./images/shBrushRuby.js"></script>

<script type="text/javascript" src="./images/shBrushSass.js"></script>

<script type="text/javascript" src="./images/shBrushScala.js"></script>

<script type="text/javascript" src="./images/shBrushSql.js"></script>

<script type="text/javascript" src="./images/shBrushVb.js"></script>

<script type="text/javascript" src="./images/shBrushXml.js"></script>

<link type="text/css" rel="stylesheet" href="./images/shCore.css"/>

<link type="text/css" rel="stylesheet" href="./images/shThemeDefault.css"/>

<script type="text/javascript">

 

/* jQuery 부분  */

jQuery.noConflict();  // 다른 라이브러리와 충돌을 방지한다.

jQuery(document).ready(function(){  // 문서가 모두 읽힌 후에 다음을 실행

    jQuery("blockquote").each( function() {  //blokquote가 사용한 태그

        if (jQuery(this).attr('class').substr(0,5)=='brush') 

        // 그중 클래스명이 brush로 시작하는 것을 찾아 적용

        {

            var temp = jQuery(this).html(); //  내용 복사

            temp = temp.replace(/\n/gi, "");

            temp = temp.replace(/<BR>/gi, "\n");

            temp = temp.replace(/<BR \/>/gi, "\n");

            //temp = '<pre class="'+ jQuery(this).attr('class') + '">'+temp+'</pre>'

            temp = '<script type="syntaxhighlighter" class="'+ jQuery(this).attr('class') + '"><![CDATA['+temp+']]><\/script>'

            jQuery(this).after(temp);   // 뒤에 새 작성된 pre 또는 script태그로 붙인다.

            jQuery(this).remove();         //  기존의 인용태그 삭제

        }

    });

 

    /* SyntaxHighlighter 부분 */

    SyntaxHighlighter.defaults['toolbar'] = false;    // 툴바 안 보기

    SyntaxHighlighter.all();

});

</script>



jQuery는 구글의 apis에서 가져다 오도록 했습니다. 현재 최신 버전이 1.4.4입니다.

그리고, 41번과 42번 줄에 보시면, pre태그와 script태그를 둘중 하나를 선택해서 사용 하시면 되는데..

여기 를 참고 하시고 선택해서 사용하세요.

저 같은 경우에는 script 태그를 선택 했습니다.

그리고 사용하는 방법은 매우 간단해 졌습니다.


텍스트 모드에서 붙여 넣기를 한 후,

인용구<Ctrl+Q>를 선택 하시면 됩니다.



그리고 HTML 편집 모드로 들어 가셔서 blockquote를 찾으셔서, 태그에 적당한 brush를 넣어 주시면, 코드가 깔끔하게 들어 갑니다.

<blockquote class="brush:html">

...

</blockquote>


그리고, 줄에 하일라이트를 넣고 싶거나, 상세 설정은


http://alexgorbatchev.com/SyntaxHighlighter/manual/configuration/


이 페이지 를 참고 하시면 됩니다. 


지원 문법


Brush nameBrush aliasesFile name
ActionScript3 as3, actionscript3shBrushAS3.js
Bash/shell bash, shellshBrushBash.js
ColdFusion cf, coldfusionshBrushColdFusion.js
C# c-sharp, csharpshBrushCSharp.js
C++ cpp, cshBrushCpp.js
CSS cssshBrushCss.js
Delphi delphi, pas, pascalshBrushDelphi.js
Diff diff, patchshBrushDiff.js
Erlang erl, erlangshBrushErlang.js
Groovy groovyshBrushGroovy.js
JavaScript js, jscript, javascriptshBrushJScript.js
Java javashBrushJava.js
JavaFX jfx, javafxshBrushJavaFX.js
Perl perl, plshBrushPerl.js
PHP phpshBrushPhp.js
Plain Text plain, textshBrushPlain.js
PowerShell ps, powershellshBrushPowerShell.js
Python py, pythonshBrushPython.js
Ruby rails, ror, rubyshBrushRuby.js
Scala scalashBrushScala.js
SQL sqlshBrushSql.js
Visual Basic vb, vbnetshBrushVb.js
XML xml, xhtml, xslt, html, xhtmlshBrushXml.js


참고 사이트


http://techbook.tistory.com/entry/tistory-highlight  : jQuery 부분은 여기의 내용을 참고 했습니다. 감사합니다.


이 포스팅에 사용된 버전


 syntaxhighlighter_3.0.83.zip

출처: http://icartsh.tistory.com/22


일단 Alt + 11키를 눌르거나   도구 -> 매크로 -> 매크로 IDE로 매크로 IDE를 실행시킴니다.

탐색기에서 MyMacros쪽에 추가 -> 모듈 추가로 새로운 매크로 파일을 생성후

Public Module Module1 여기 아래 부분에 매크로를 작성하시면 됨니다..

Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports EnvDTE90a
Imports EnvDTE100
Imports System.Diagnostics
Imports System.IO '추가
 
 
Public Module Module1
    Public Sub SaveUtf8()
        Try
            DTE.ActiveDocument.Save()
 
            Dim fileName As String = DTE.ActiveDocument.FullName
            Dim input As New FileStream(fileName, FileMode.Open)
            Dim isUTF8 As Boolean = (input.ReadByte = &HEF And input.ReadByte = &HBB And input.ReadByte = &HBF)
            input.Close()
 
            If (Not isUTF8) Then
                Dim s As String = File.ReadAllText(fileName, System.Text.Encoding.Default)
                File.WriteAllText(fileName, s, System.Text.Encoding.UTF8)
            End If
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.OkOnly, "UTF8로 바꾸는데 실패했습니다.")
        End Try
    End Sub
 
    Public Sub SaveReplaceEmpty()
        Try
            Dim result As vsFindResult
            result = DTE.Find.FindReplace(vsFindAction.vsFindActionReplaceAll, _
                                 ":b+$", _
                                 vsFindOptions.vsFindOptionsRegularExpression, _
                                 String.Empty, _
                                 vsFindTarget.vsFindTargetCurrentDocument, , , _
                                 vsFindResultsLocation.vsFindResultsNone)
 
            DTE.ActiveDocument.Save()
            If result = vsFindResult.vsFindResultReplaced Then
                DTE.ActiveDocument.Save()
            End If
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.OkOnly, "공백 및 탭을 지우는데 실패했습니다.")
        End Try
    End Sub
End Module



위와 같은 함수 2개를 만들면 됨니다..


도구 -> 옵션-> 키보드 탭으로 가신후



MyMacros에 매크로를 추가했기때문에 my만 검색해도 아래와 같이 나오게 됨니다..

그런 후 원하시는 단축키를 지정해 주시면 됩니다.

출처: http://jinsepi.blog.me/100119372539


Subversion/SVN 설정시 branches, tags, trunk 에 대한 개념

trunk
- 기본적으로 개발을 시작할 때 사용하는 디렉토리(소스의 주 개발 작업을 진행하는 폴더)
- 모든 프로그램 개발 작업은 trunk 디렉토리에서 부터 시작
- main, mainline, production의 의미로 사용됨

 

brankches
- trunk 에서 뻗어져 나온 나뭇가지(소스의 실험적인 작업을 진행하는 폴더, 소스의 현재 버전을 유지보수 하고, 현재 버전을 기반으로 차기 버전을 개발할 경우 이 폴더 이용)
- trunk 디렉토리에서 프로그램을 개발하다보면 큰 프로젝트에서 또 다른 작은 분류로 빼서 개발하는 경우.
- 프로젝트 안의 작은 프로젝트
- release 버전과 유지보수 버전을 분리하고 싶을 때 사용
- customizing이나 hot fix 목적으로 분리하여 수정함
- 수정이 계속해서 발생하다가 궁극적으로는 trunk에 merge 되는 것이 일반적임

 

tags
- 꼬리표의 개념.
- 현재 릴리즈된 소스를 관리하기 쉽게 따로 보관하는데 사용. 즉, 개발을 위한 것이 아니라 보관을 위한 것이기 때문에 export만 해야 한다. 체크아웃하여 커밋 할 경우 경고 메시지가 출력된다.
- 프로그램을 개발하면서 정기적으로 릴리즈 할 때 0.1, 0.2, 1.0 식의 버전의 소스를 따로 저장하는 공간
- 한번 만들면 수정하지 않음
- releases, snapshots, baselines의 의미로 사용됨


- 유니티 설정 바꾸기


1. 자신의 유니티 프로젝트를 엽니다.


2. 상단 메뉴에 Edit - Project Settings - Editor 를 누릅니다.




3. 그러면 오른쪽 Inspector창에 Editor Settings가 뜨는데

    Version Control 항목이 있습니다. 거기서 Disable을 Meta Files로 바꿔줍니다.


    스샷에서 빼먹은 부분이 있는데 Inspector창 맨 아래에 Asset Srialization Mode를 Force 

    Text로 바꿔주시기 바랍니다.




4. 프로젝트를 저장 하시고, Unity를 끕니다.




여기까지 따라 하셨다면 이제 SVN설정을 합시다.


SVN 체크아웃된 경로 안에 프로젝트 폴더가 복사되어 있다고 가정하고 쓰겠습니다.


중요한것은 프로젝트 경로명에 한글이 들어가서는 절대로 안됩니다.


- SVN 설정하기


1. 프로젝트 폴더에서 무시목록을 추가합니다.


*.DotSettings

*.csproj

*.pidb

*.sln

*.suo

*.unityproj

*.user

*.userprefs

Temp

obj


2. 프로젝트 폴더 안에 Library 폴더에서 무시목록을 추가합니다.


AnnotationManager

AssetImportState

AssetServerCacheV3

AssetVersioning.db

CurrentLayout.dwlt

EditorUserBuildSettings.asset

EditorUserSettings.asset

FailedAssetImports.txt

InspectorExpandedItems.asset

MonoManager.asset

ScriptAssemblies

ScriptMapper

UnityAssemblies

assetDatabase3

expandedItems

guidmapper

metadata


3. 커밋합니다.




- SmartSVN에서 설정하기 (회사에서 SmartSVN을 사용하기 때문에 SmartSVN에 대한 설명도 적겠습니다.)


1. SmartSVN을 켭니다.


2. 해당 프로젝트를 SVN 경로에 복사합니다.



3. Assets 폴더를 오른쪽 클릭후 Add 누르고 OK를 누릅니다.



4. ProjectSettings 폴더를 오른쪽 클릭후 Add 누르고 OK를 누릅니다.



5. 해당 프로젝트에 오른쪽 클릭후 Properties - Ignore Patterns를 누릅니다.



6. 위에 무시목록을 복사해서 붙여넣은 후 OK를 누릅니다. (Depth는 기본상태로 둡니다)



7. 해당 프로젝트에 Library 폴더에 오른쪽 클릭 후 Add 를 누릅니다. (OK버튼 바로 누르지 않도록 주의)



8. Add 팝업창에서 Depth를 Only this directory로 변경 후 OK를 누릅니다.



9. 해당 프로젝트에 Library 폴더에 오른쪽 클릭 후 Properties - Ignore Patterns를 누릅니다.



10. 위의 무시목록을 복사해서 붙여넣은 후 Depth를 Immediate children (files and directories)를 선택한 뒤 OK를 누릅니다.



11. Library 폴더에 전체 선택후 Add를 누릅니다.




그냥 Library 폴더를 무시목록 추가하고 OK 누르시면 됩니다.


12. 커밋합니다.





아 스토리 너무 흥미진진하고 재미있어서 미칠듯

다음편 왜 안나오나 =ㅁ=




진정한 게임(소설 등 전부다, 이하 게임으로 부름) 팬은 게임을 살줄도 알아야죠

게임을 사지않고 불법 공유를 하는 행위는

나중에 자신히 하고싶은 게임을 만드는 사람이 사라지는 행위입니다.

꼭 정품 구매하시길...

출처: http://devday.tistory.com/1535 (izeye님)

참고하면 좋음: http://rainflys.tistory.com/102
 


Java에서 2개 이상의 리턴 값을 어떻게 전달할까?

C나 C++처럼 포인터도 없고 C#처럼 out 키워드도 없다.

물론 방법은 많다.

마음에 드는 것이 없어서 그렇지.

우선 리턴 값의 모음으로 데이터 클래스를 만들 수 있다.

문제는 이런 상황이 올 때마다 데이터 클래스를 만들어야만 하는 문제가 있다.

다음으로 Object[]로 넘기는 방법을 고려할 수 있다.

문제는 캐스팅을 해야만 한다는 것이고, 또 개수가 늘어나면 가독성이 심하게 떨어진다.

그래서 선택한 방법이 다음과 같은 방식이다.

물론 여전히 100% 만족스럽진 못하지만.

public class OutParam<T>
{
    private T result;
    public void set(T result)
    {
        this.result = result;
    }
    public T get()
    {
        return result;
    }

    @Override
    public String toString()
    {
        return result.toString();
    }
}
Generic을 사용해서 C#의 out 파라미터를 흉내낸 것이다.

메소드 정의 예:

void test(String a, String b, OutParam<string> outC, OutParam<string> outD)
{
    ...
    outC.set(something);
    outD.set(somethingElse);
}
메소드 호출 예:

OutParam<string> outC = new OutParam<string>();
OutParam<string> outD = new OutParam<string>();
test(a, b, outC, outD);
System.out.println(outC.get());
System.out.println(outD.get());


====================================================
여기까지 원본
====================================================

위의 참고 하면 좋은 링크 참고하면 좋고,

개인적으로 C# 스타일이 마음에 들기 때문에

izeye님 방식이 마음에 드네요.

RAM 4GB 이상으로 사양은 넉넉한데 Out of Memory 메세지가 뜨면서 튕기시는 분들은 참고하세요.

 

64bit OS를 사용하시는 분에게 해당되는 팁입니다.

100% 해결되는 방법이 아닐 수도 있습니다.

 

1. http://www.ntcore.com/exsuite.php

위 사이트에 접속하셔서 Explorer Suite 파일을 받으세요.

또는 이걸 다운받으세요  

 

2. 설치하시면 CFF Explorer란 실행 파일이 있습니다.

실행해주세요.

 

3. 아래 그림과 같이 OPEN을 누르시고 마비노기 영웅전이 설치된 폴더에서 heroes.exe 파일을 열어주세요.

 

 

 

4. 아래 그림의 번호 순서대로 클릭해주세요.

1. File Header -> 2. Click here -> 3. App can handle -> 2gb address space -> 4. OK

 

 


 

5. 마지막으로 OPEN 버튼 옆의 SAVE를 누르시면 되겠습니다.

 


 

6. 번거롭지만 마비노기 영웅전의 업데이트가 있을때마다 이 작업을 해주셔야 됩니다.

 

 

※ 출처http://www.inven.co.kr/board/powerbbs.php?come_idx=2028&l=14981 

             http://blog.naver.com/makinoyui/60133001535