2014년 3월 31일 월요일

Android, floating window app을 위한 StandOut library

Activity 실행에 상관없이 항상 떠 있는 Floating window app을 만들어야 했기에 찾아보고 정리함. (하지만 구글 앱스토어에 이런 앱을 만들어 올려 다른 앱 실행을 방해한다면 등록 불허 될 수도 있음 ^^;;;; )

찾아보니 StandOut library가 거의 유일 하게 존재하여 대충 정리 ㅜㅜ

[StandOut library]
 by pingpongboss
 Intorduction : http://forum.xda-developers.com/showthread.php?t=1688531
 Source code : https://github.com/pingpongboss/StandOut

Functionality
  • Provide your own view. Very easy to integrate
  • Window decorators (titlebar, minimize/close buttons, border, resize handle)
  • Windows are moveable and resizable. You can bring-to-front, minimize, and close
  • Minimized windows can be restored (the example APK demos this using the notification panel)
  • Create multiple types of windows, and multiple windows of each type
  • Continuously being developed. More coming.

깔끔하게 library 형태로 되어 있고 소스코드의 규모도 간단하여 분석 쉬움.
Android Service를 상속한 StandOutWindow를 상속하여 각 창에 해당되는 window class를 생성하여 floating window를 보여주며 StandOut library 내에서 touch event를 각 view의 widget들에 전달할 수 있도록 처리하고 있음.

StandOutWindow class
: https://github.com/pingpongboss/StandOut/blob/master/library/src/wei/mark/standout/StandOutWindow.java


/**
 * Extend this class to easily create and manage floating StandOut windows.
 * 
 * @author Mark Wei <markwei@gmail.com>
 * 
 *         Contributors: Jason <github.com/jasonconnery>
 * 
 */
public abstract class StandOutWindow extends Service {
 static final String TAG = "StandOutWindow";

Window class
: https://github.com/pingpongboss/StandOut/blob/master/library/src/wei/mark/standout/ui/Window.java



/**
 * Special view that represents a floating window.
 * 
 * @author Mark Wei <markwei@gmail.com>
 * 
 */
public class Window extends FrameLayout {
 public static final int VISIBILITY_GONE = 0;
 public static final int VISIBILITY_VISIBLE = 1;
 public static final int VISIBILITY_TRANSITION = 2;

 static final String TAG = "Window";

 /**
  * Class of the window, indicating which application the window belongs to.
  */
 public Class<? extends StandOutWindow> cls;
...생략

 /**
  * Context of the window.
  */
 private final StandOutWindow mContext;
 private LayoutInflater mLayoutInflater;

 public Window(Context context) {
  super(context);
  mContext = null;
 }

 public Window(final StandOutWindow context, final int id) {
  super(context);
  context.setTheme(context.getThemeStyle());

  mContext = context;
  mLayoutInflater = LayoutInflater.from(context);

...생략

  // create the window contents
  View content;
  FrameLayout body;

...생략
  addView(content);

  body.setOnTouchListener(new OnTouchListener() {

   @Override
   public boolean onTouch(View v, MotionEvent event) {
    // pass all touch events to the implementation
    boolean consumed = false;

    // handle move and bring to front
    consumed = context.onTouchHandleMove(id, Window.this, v, event)
      || consumed;

    // alert implementation
    consumed = context.onTouchBody(id, Window.this, v, event)
      || consumed;

    return consumed;
   }
  });

  // attach the view corresponding to the id from the
  // implementation
  context.createAndAttachView(id, body);


사용자는 StandOutWindow를 상속받아 app 이름, view 구성, window 크기 설정등을 하면 간단한 window를 생성할 수 있으며 window의 세부 설정을 지정할 수 있도록 parameter를 풍부하게 제공하고 있음.

StandOutWindow example 중 SimpleWindow
: https://github.com/pingpongboss/StandOut/blob/master/example/src/wei/mark/example/SimpleWindow.java


public class SimpleWindow extends StandOutWindow {

 @Override
 public String getAppName() {
  return "SimpleWindow";
 }

 @Override
 public int getAppIcon() {
  return android.R.drawable.ic_menu_close_clear_cancel;
 }

 @Override
 public void createAndAttachView(int id, FrameLayout frame) {
  // create a new layout from body.xml
  LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
  inflater.inflate(R.layout.simple, frame, true);
 }

 // the window will be centered
 @Override
 public StandOutLayoutParams getParams(int id, Window window) {
  return new StandOutLayoutParams(id, 250, 300,
    StandOutLayoutParams.CENTER, StandOutLayoutParams.CENTER);
 }

 // move the window by dragging the view
 @Override
 public int getFlags(int id) {
  return super.getFlags(id) | StandOutFlags.FLAG_BODY_MOVE_ENABLE
    | StandOutFlags.FLAG_WINDOW_FOCUSABLE_DISABLE;
 }

다만 각 window를 닫을 때 StandOut.close,  StandOut.closeAll을 호출하면 되는대 각 window가 Android service로 돌아가고 있어 서비스까지 완전히 종료하려면 service의 intent filter 걸어서 stop시켜야 함.

[TouchSoftly]
 : http://stackoverflow.com/questions/11443820/floating-widget-overlay-on-android-launcher?answertab=votes#tab-top
Source code : https://github.com/t0mm13b/TouchSoftly

floating window app을 만드는 방법에 대한 글과 간단한 prototype이다.
StandOut library 분석이 좀 부담된다면 이것을 참고하면 될듯.

2014년 3월 12일 수요일

Unity script link 정리 (links only)

개인적으로 나중에 찾아보고자 정리함.

[C# Language]

https://unity3d.com/learn/tutorials/modules/beginner/scripting
: C# script official tutorial

http://www.javacamp.org/javavscsharp/
: Java와 C#과의 비교

http://www.codeproject.com/Articles/245622/Using-the-Java-Native-Interface-in-Csharp
: C#에서 Java Native Interface를 사용하는 간단한 예제

[Unity 개발 KnowHow, Tutorial]

http://www.devkorea.co.kr/bbs/board.php?bo_table=m03_lecture&sca=Unity3D&currentId=42
: dev korea unity 노하우, QnA

http://www.devkorea.co.kr/bbs/board.php?bo_table=m03_lecture&wr_id=3435&sca=Unity3D&currentId=42
: 기초 게임 개발 강좌

http://www.devkorea.co.kr/bbs/board.php?bo_table=m03_lecture&wr_id=3451&sca=Unity3D&currentId=42
: C# + NGUI 2.5D 게임 만들기 강좌

http://www.androidside.com/bbs/board.php?bo_table=421&page=3
: 저녁놀 님의 Unity 3D 강좌

http://www.unitystudy.net/bbs/board.php?bo_table=writings&page=4&page=3
: 간단 강좌들


http://unity3d.com/learn/tutorials/modules
: Unity 공식 tutorial (2D, Animation, Editor, Graphics, Navigation, Physics, Scripting)

Unity script - coroutine

Unity script 사용 관련 된 내용들을 정리함.


[Coroutine]

하단 링크들 참고하여 정리

Coroutine
 : 서브루틴(subroutine)에서 일반화 된 개념으로 수행 일시 정지(suspending)을 위해 다수 entry points 를 허용하고 다른 시점에서 수행을 다시 진행(resume)할 수 있는 computer program component (1)
  > 예)  cooperative tasksexceptionsevent loopiteratorsinfinite listsand pipes.

Coroutine 사용 방법

coroutine은 IEnumerator 리턴값을 가지고 yield 함수를 호출해야한다.
IEnumerator Fade() {
 for (float f = 1f; f >= 0; f -= 0.1f) {
  Color c = renderer.material.color;
  c.a = f;
  renderer.material.color = c;
  yield return;
 }
}

CoRoutine1.png

 아래 그림과 같이 코루틴은 자신을 호출한 함수에 데이터를 하나 넘겨주고 쉽니다. 받은 측에서는 데이터를 받고 나서 처리한 후에 코루틴에게 다음 데이터를 달라고 깨웁니다. 쉬고 있던 코루틴은 일어나서 다시 데이터를 전달하고.. 이를 계속 반복하는 구조로 동작합니다. 이러한 작업에 적절한 인터페이스가 IEnumerator 이며, C#에서 코루틴을 사용할 때는 이를 사용하여야 합니다.
일반적으로 호출한 함수에게 데이터를 전달할 때, return 구문을 사용하게 되면 데이터를 전달하고 함수는 종료됩니다. 코루틴은 이와 다르게 데이터를 전달한 후에 자신은 대기하고 있어야 하는데, 이를 위해 C#에서는 yield return이라는 키워드를 제공하고 있으며 이를 사용하면 됩니다. (4)

yield return ... ;

유니티 엔진과 interaction (4)

CoRoutine3.png


Coroutine 사용 시 (4)
- 순차적이거나 시간차를 통해 수행되어야 하는 루틴 작성 가능
- 다른 연산이 종료될 때 까지 wait 시킬 수 있음.
- 성능 상 이점
 : coroutine 발생 시 unity engine는 다른 일을 처리하고 시간이 되면 코루틴을 실행하므로 wait polling 같은 상황을 발생시키지 않는다.

yield 구문 예

코루틴용 데이터
엔진이 수행하는 기능
yield return null
다음 프레임까지 대기
yield return new WaitForSeconds(float)
지정된 초 만큼 대기
yield return new WaitForFixedUpdate()
다음 물리 프레임까지 대기
yield return new WaitForEndOfFrame()
모든 렌더링작업이 끝날 때까지 대기
yield return StartCoRoutine(string)
다른 코루틴이 끝날 때까지 대기
yield return new WWW(string)
웹 통신 작업이 끝날 때까지 대기
yield return new AsyncOperation
비동기 작업이 끝날 때까지 대기 ( 씬로딩 )




Links 

http://en.wikipedia.org/wiki/Coroutine
: (1) Coroutine

http://docs.unity3d.com/Documentation/Manual/Coroutines.html
: (2) Coroutines, Unity manual

http://unityindepth.tistory.com/entry/Coroutine
: (3) 코루틴(Coroutine)++ 개념

http://www.unitystudy.net/bbs/board.php?bo_table=writings&wr_id=43
: (4) [스크립팅] 코루틴(Coroutine)의 기본 개념 및 활용

http://www.gamedevforever.com/200
: (5) 유니티엔진의 coroutine & yield 1편. FSM의 습격


2014년 3월 11일 화요일

Unity 개발 시 REST api 호출 방법과 json library 관련 링크 정리

[REST API invoke in Unity]

REST API를 사용하기 위해서는 REST server로 접속, response 획득, response parsing이 필요하고 C#에서 REST API를 위한 library들이 많아서 입맛에 맞는 것을 찾아서 사용해도 될것 으로 보임.

REST API 호출 시 Response를 받아 처리하는 부분을 비동기적으로 처리해야 하는 부분이 있어 co-routine 방식을 사용해야 함 (이 부분은 더 상세하게 봐야 함.)

http://through-the-interface.typepad.com/through_the_interface/2012/04/calling-a-web-service-from-a-unity3d-scene.html
: Unity상에서 WWW class를 사용해서 web-service API를 사용하는 예제

public class ImportSpheres : MonoBehaviour
{
  // The radius of our outer sphere 
  const float radius = 0.8f;

  IEnumerator DownloadSpheres()
  {
    // Pull down the JSON from our web-service 
    WWW w = new WWW(
      "http://apollonian.cloudapp.net/api/spheres/" +
      radius.ToString() + "/7"
    );
    yield return w;

    print("Waiting for sphere definitions\n");

    // Add a wait to make sure we have the definitions 
    yield return new WaitForSeconds(1f); 
    print("Received sphere definitions\n");

    // Extract the spheres from our JSON results 
    ExtractSpheres(w.text);
  } 
  void Start ()
  {
    print("Started sphere import...\n"); 
    StartCoroutine(DownloadSpheres());
  } 
  void ExtractSpheres(string json)
  {
    // Create a JSON object from the text stream 
    JSONObject jo = new JSONObject(json);


http://answers.unity3d.com/questions/11021/how-can-i-send-and-receive-data-to-and-from-a-url.html
: C#, JavaScript에서 GET, POST 사용 예

The normal way of doing this would be to use Get or Post requests via the WWW class or the WWWForm class. If you're making a Get request with parameters added to the end of the url, you'd use code similar to this:
'GET' request In C#
In C# this is a little more complex because of the way that you have to write out coroutines in full. In this example, the initiation of the request is done in "Start". We then hand the WWW object to a coroutine called "WaitForRequest" which waits for the www request to complete.
  1. using UnityEngine;
  2. public class GetURL : MonoBehaviour {
  3. void Start () {
  4. string url = "http://example.com/script.php?var1=value2&var2=value2";
  5. WWW www = new WWW(url);
  6. StartCoroutine(WaitForRequest(www));
  7. }
  8. IEnumerator WaitForRequest(WWW www)
  9. {
  10. yield return www;
  11. // check for errors
  12. if (www.error == null)
  13. {
  14. Debug.Log("WWW Ok!: " + www.data);
  15. } else {
  16. Debug.Log("WWW Error: "+ www.error);
  17. }
  18. }
  19. }
more ▼
answered Feb 03 '10 at 05:24 PM
duck gravatar image
duck ♦♦
45.1k  106  160  425




[JSON Parser]


http://kimstar.pe.kr/blog/74
: JSON 개요 및 예제, 전반적인 내용에 대해서 정리된 글

http://lab.gamecodi.com/board/zboard.php?id=GAMECODILAB_QnA_etc&page=1&sn1&divpage=1&sn=off&ss=on&sc=on&select_arrange=hit&desc=asc&no=2616
: litJSON iOS상 serialization 이슈

여러가지 라이브러리가 있지만 간단한 simpleJSON을 고려..

http://wiki.unity3d.com/index.php/SimpleJSON
: SimpleJSON 사이트

http://blog.naver.com/whostheman?Redirect=Log&logNo=100179607893
: Simple JSON 사용 설명, 토튜님.

{
    "version": "1.0",
    "data": {
        "sampleArray": [
            "string value",
            5,
            {
                "name": "sub object"
            }
        ]
    }
}
  
여기서 sampleArray의 string value에 접근하는 방법을 보자.
 아래와 같이 일단 string 값을 파싱한다.
  
var N = JSON.Parse(the_JSON_string);
그리고 노드(Node)의 이름과 index로 접근이 가능하다.
string val = N["data"]["sampleArray"][0];

2014년 3월 7일 금요일

Android 상에서의 Unity 개발을 위한 필요 사항(plugin 개발 방법, debugging) 링크 정리

Android 타겟으로 Unity 개발을 위한 개발 방법 링크를 정리함.
- Android plugin for Unity
- Rest API using in C# script
- tutorial links

[Plugin for Android]

대충 정리해 보면
Android 타겟으로 Unity로 게임 개발 시
Unity 내에서 안드로이드 feature를 사용할 수 없는 부분이 있음.
(예, billing, Android system feature 사용 등)

위 문제점을 해결하고자
Android native plugin을 개발해서 Android <-> Unity간 interaction을 만들어 처리해야 한다.

Android native plugin 내에서 사용 가능한 방법은
1. Unity JNI를 이용해서 Android feature를 사용하는 java method를 호출하는 방법
   : 반대로 Android side에서는 Unity에서 제공하는 UnityPlayer를 이용해 메세지를 보낼 수 있음.
2. UnityPlayerActivity를 상속받아 method를 override하여 처리하는 방법이 있음.

개발 결과물은
 - Unity에서 바로 Android phone으로 deploy할 수 있고
 - Android project로 export해서 eclipse에서 deploy할 수 있다.


Building Plugings for Android

Unity 공식 문서에서는 Android plugin에서 사용 가능한 두가지 방법을 설명하고 있음.
1. Using Java Plugins
 > Script상에서 JNI interface를 사용하여 java code를 직접 호출하여 사용 하는 방법

using UnityEngine; 
public class NewBehaviourScript : MonoBehaviour { 

 void Start () { 
  AndroidJNIHelper.debug = true; 
  using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { 
   jc.CallStatic("UnitySendMessage", "Main Camera", "JavaMessage", "whoowhoo"); 
  } 
 } 

 void JavaMessage(string message) { 
  Debug.Log("message from java: " + message); 
 }
} 

2. Extending the UnityPlayerActivity Java Code
 > UnityPlayerActivity를 상속 받아 Activity 코드에서 Android 관련 처리를 할 수 있도록 하는 방법

public class OverrideExample extends UnityPlayerActivity {

  protected void onCreate(Bundle savedInstanceState) {

    // call UnityPlayerActivity.onCreate()
    super.onCreate(savedInstanceState);

    // print debug message to logcat
    Log.d("OverrideActivity", "onCreate called!");
  }

  public void onBackPressed()
  {
    // instead of calling UnityPlayerActivity.onBackPressed() we just ignore the back button event
    // super.onBackPressed();
  }
} 
* 참고로 UnityPlayer에는 사용중인 Activity를 나타내는 currentActivity property와
  Unity로 메세지를 보낼 수 있는 UnitySendMessage method가 있어 참고 하면 될듯.
  (다른 것들 도 있으나 어디서 어떻게 사용해야 하는지 잘 모르겠음)


http://blog.naver.com/PostView.nhn?blogId=saram95&logNo=90176732890&parentCategoryNo=11&categoryNo=30&viewDate=&isShowPopularPosts=false&from=postView
: UnityPlayerActivity를 상속 받아 사용 하는 방법에 대한 자세한 설명

 - UnityPlayerActivity를 상속한 activity를 가진 Android Project 생성
 - library로 만든 후 jar 파일 생성 Unity project에 추가
 - Unity project에서 JNI를 통해 Android의 activity의 method 호출

http://www.devkorea.co.kr/bbs/board.php?bo_table=m03_lecture&wr_id=3369&sca=Unity3D&currentId=42
: Android in-app billing 추가 방법

http://it-backup.tistory.com/2
: Unity Project를 eclispe project로 Export하는 방법

[C# plugin for eclipse]

: eclipse용 C# plugin 'Emonic'이 존재

up vote14down voteaccepted
Emonic is an actual eclipse plugin for C#: http://emonic.sourceforge.net/.
Here's a handy guide for how to get it set up: http://www.ibm.com/developerworks/library/os-eclipse-migratenetvs/
Monodevelop is great, but won't meet your requirement not to have to work in multiple IDEs.
share|improve this answer

http://www.ibm.com/developerworks/library/os-eclipse-migratenetvs/
: 'Emonic'을 사용하여 .Net project를 컴파일 하는 방법을 설명
 => eclipse 용 C# plugin을 사용해서 Unity 프로젝트를 빌등 할 수 없는 것으로 보이니 안드로이드 개발자들은 그냥 참고만 하시라...




Krispy's Avatar
Location
Ontario
Posts
69

Eclipse, C#, and Unity

So, I've been trying to start using Eclipse (with the Emonic C# plugin) with Unity, mainly for ease of debugging, unit testing, and integration with code repositories. I'm still stumped on how I get Eclipse to use the UnityEngine namespace, or, more accurately, how to actually get the UnityEngine namespace.

Any help?


[Android debuging tip]

http://forum.unity3d.com/threads/70197-Any-tips-for-debugging-Android
: Android debugging tip

eriQue
Simply start it like this:


$ adb logcat

and it will start printing out everything that is going on on the device. To limit it to only show the output from inside Unity, you can try this:

$ adb logcat -s Unity

or, to get a little bit more info about what's going on:

$ adb logcat -s Unity ActivityManager PackageManager dalvikvm DEBUG

If you wish to report a bug or otherwise 'quote' the logcat, you can dump the complete logcat to a file like this:

$ adb logcat -d > logcat.txt


2014년 3월 6일 목요일

Android 상에서의 Unity 개발 환경 링크 정리

Unity를 Android 상에서 개발을 하려면 필요한 사항들을 정리함.

개발환경 중
OS는 Unity 개발 툴이 Windows, iOS를 지원하므로 Linux는 제외이고

관련 필요한 기본 개발 툴은
- Unity 개발 툴
 : C# script 편집 및 디버깅을 위해 Mono Develop을 포함 하고 있음.
- Android SDK, Java runtime

그 외 필요한 개발 툴은
- Visual Studio
 : C# script 편집을 위해 필요하다면, 단 express, pro 버전 별 사용 시 차이점 있음.
 : 단 편집만 가능.

- UnityVS
 : Visual Studio에서 Unity script 편집, 디버깅을 가능하게 해주는 plugin
 : 유로, 안 써봐서 모르겠지만 다른 포스팅들에서 추천함..


[Unity & Android]
Getting Started
: http://docs.unity3d.com/Documentation/Manual/android-GettingStarted.html
 > 별 내용은 없으나 하단에 링크 포함.


Page last updated: 2013-10-10
Unity 설치
: http://blog.naver.com/PostView.nhn?blogId=foxmann&logNo=90178254718

Unity Android에서 지원되지 않는 Feature들
http://docs.unity3d.com/Documentation/Manual/android-unsupported.html

- Graphics
 : Non-square textures are not supported by the ETC format.
 : Movie Textures are not supported, use a full-screen streaming playback instead. Please see the Movie playback page for more information.
- Scripting
 : OnMouseEnter, OnMouseOver, OnMouseExit, OnMouseDown, OnMouseUp, and OnMouseDrag events are not supported on Android.
 : Dynamic features like Duck Typing are not supported. Use #pragma strict for your scripts to force the compiler to report dynamic features as errors.
 : Video streaming via WWW class is not supported.
Page last updated: 2012-10-08

Touble Shooting



[Unity Android 개발환경]

Android SDK Setup
: http://docs.unity3d.com/Documentation/Manual/android-sdksetup.html
 > 공식 방법, 좀 더 자세한 설명은 하단 링크 참조

1. Download the Android SDK

2. Installing the Android SDK
...In step 4 of Installing the SDK be sure to add at least one Android platform with API level equal to or higher than 9 (Platform 2.3 or greater), the Platform Tools, and the USB drivers if you're using Windows.

3. Get the device recognized by your system
...Note: Don't forget to turn on "USB Debugging" on your device. Go to Settings -> Developer options, then enable USB debugging. As of Android Jelly Bean 4.2 the Developer options are hidden by default. To enable them tap on Settings -> About Phone -> Build Version multiple times. Then you will be able to access the Settings -> Developer options.

4. Add the Android SDK path to Unity
The location of the Android SDK can also be changed in the editor by selecting Unity > Preferences from the menu and then clicking on External Tools in the preferences window.


http://blog.naver.com/PostView.nhn?blogId=saram95&logNo=90176731230&categoryNo=23&parentCategoryNo=11&viewDate&currentPage=1&postListTopCurrentPage=1
: Java 부터 안드로이드, Unity 개발 환경 구축, Plugin 개발을 상세히 정리함.
 > Android SDK
 > Unity Android SDK 설정
 > Android Plugin 만들기


http://phiru.tistory.com/164
: 좀 오래되긴 했지만 Android 설정 및 Unity 연동 관련 설명, 같은 카테고리에 unity 3D 관련 tip들이 정리되어 있음.

[Unity with VisualStudio]

http://docs.unity3d.com/Documentation/Manual/VisualStudioIntegration.html

Unity's VisualStudio integration has two components:
1) Unity creating and maintaining VisualStudio project files. Works with Express and with Profesional.
2) Unity automatically opening VisualStudio when you doubleclick on a script, or error in Unity. Works with Professional only.

I've got Visual Studio Express, how do I use it?

  • In Unity, select from the menu Assets->Sync MonoDevelop Project
  • Find the newly created .sln file in your Unity project (one folder up from your Assets folder)
  • Open that file with Visual Studio Express.
  • You can now edit all your script files, and switch back to Unity to use them.

I've got Visual Studio Profesional, how do I use it?

  • In Unity, go to Edit->Preferences, and make sure that Visual Studio is selected as your preferred external editor.
  • Doubleclick a C# file in your project. Visual Studio should automatically open that file for you.
  • You can edit the file, save, and switch back to Unity.

http://myevan.cpascal.net/articles/2013/unity_vs_gac_win7.html
: 설정 방법 및 빌드에러 조치법 포함.

하지만 Unity-MonoDevelop 과는 다르게 UnityEngine.dll 과 UnityEditor.dll 을 찾지 못해 빌드 에러가 발생합니다.프로젝트 참조 추가 기능을 사용해서 유니티 에셈블리 경로를 추가해주는 방법도 있지만, Sync MonoDevelop Project 를 설정할 때마다 참조를 추가해주어야 하는 불편함이 있습니다.
/Applications/Unity//Unity.app/Contents/Frameworks/Managed/
GAC(Global Assembly Cache) 기능을 사용하면 유니티 어셈블리를 빌트인 어셈블리처럼 사용할 수 있습니다.Windows 7 64bit 버전라면 레지스트리 에디터(regedit.exe)를 실행해 다음과 같은 내용을 추가합니다.
[HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft.NETFramework\AssemblyFolders]
유니티 프레임워크 어셈블리 dll 경로
mac+parallerls 를 사용하는 경우 /Application 경로에 직접 접근이 되지 않으므로 “C:\UnityFrameworks/버전"에 어셈블리 파일들을 복사해서 사용합니다.비주얼 스튜디오를 재실행하면 UnityEngine 과 UnityEditor 위에 표시된 느낌표(!)마크가 사라지면서 빌드를 할 수 있게 됩니다.
참고 자료

UnityVS - plugin

http://devkorea.co.kr/bbs/board.php?bo_table=m03_qna&wr_id=25504
http://directaccess.tistory.com/entry/UnityVS-12-VisualStudio-2012

 => Visual Studio에서 편집만 할 것면 상관 없지만 디버깅이 필요하다면 필요.
단지 Visual Studio를 C# 편집기로 사용한다면 답답하기 짝이 없다. 그냥 텍스트 편집기일 뿐이고 컴파일이나 디버깅을 할 수 없고 Unity에서 사용되는 asset을 접근할 수 도 없음...
UnityVS를 사용해 본적은 없지만 Unity에서 사용하는 project setting을 그대로 구성해 주고 디버깅도 가능하다고 하니... 한번 사용해보고 싶다..


eclipse as Unity C# editor

http://forum.unity3d.com/threads/6558-Eclipse-C-and-Unity
: eclipse에서 C# plugin인 Emonic을 사용해서 Unity와 연동 개발 시 문제를 해결 방법을 묻고 있지만 이래저래 하다 좀 엉뚱하게 Visual Sutdio plugin을 소개하는 답이 달리게 됨.
 > C# script 편집, 컴파일 위한 Unity와 eclipse의 연동 개발은 어려운 것으로 보임.

질문 >

Krispy's Avatar
Location
Ontario
Posts
69

Eclipse, C#, and Unity

So, I've been trying to start using Eclipse (with the Emonic C# plugin) with Unity, mainly for ease of debugging, unit testing, and integration with code repositories. I'm still stumped on how I get Eclipse to use the UnityEngine namespace, or, more accurately, how to actually get the UnityEngine namespace.

Any help?

[MonoDevelop 디버깅 방법]

http://adolys.tistory.com/entry/Unity3D-%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-Debugging-%EA%B4%80%EB%A0%A8-%ED%8C%81