2013年7月27日土曜日

accelerationの値を表示する

GameObject>Create Other>GUI Textを選択し、GUI Textを生成する


GameObject>Create Emptyで空のGameObjectを生成する。


GameObjectとGUI Textが生成される。



ProjectのWindowに移動し、Create>Javascriptを選択する。


ファイル名はsensorとする。


ソースコード
#pragma strict
var gText : GUIText;

function Start () {

}

function Update () {
 var dx = Input.acceleration.x;
 var dy = Input.acceleration.y;
 var dz = Input.acceleration.z;
 
 gText.text = "dx="+dx+"\n dy="+dy+"\n dz="+dz;
}

作成したsensor.jsをGameObjectに関連づける。


GameObjectを選択した状態で、GUI TextをGameObjectのInspectorのGTextのパートにドラッグ&ドロップする。



GUI Textureからボタンを作成する



GameObject>Create Emptyを選択する


ProjectのCreate>Javascriptを選択する


GameObject>Create Other>GUI TextureでGUI Textureを新規作成する。


生成したGUI Textureの名前をわかりやすい名前、ButtonTextureに変更する。


GUI TextureのInspectorは以下の通り。Textureを差し替えると、表示する画像を変える事が可能になる。



ソースコード

#pragma strict
public var gui : GUITexture;

function Start () {

}

function Update () {
 if(Input.touchCount > 0){
  for(var i : int = 0; i < Input.touchCount; i++){
   var touch : Touch = Input.GetTouch(i);
    if(touch.phase == TouchPhase.Began && gui.HitTest(touch.position)){

     Handheld.Vibrate();
    }
  }
 }
}



作成したJavaScriptをGameObjectに関連付ける。



GameObjectを選択し、ButtonTextureをguiに項目にドラッグ&ドロップし、関連付けをする。


これでGUI Textureのボタンを選択すると、バイブレーションが発動する。


UIボタンを作成する

GameObject>Create Emptyを選択する


ProjectのCreate>Javascriptを選択する



ソースコード
#pragma strict

function Start () {

}

function Update () {

}

function OnGUI () {
  if (GUI.Button (Rect (10,10,300,300), "Vibrate")){
     Handheld.Vibrate();
   }

}

JavaScriptをGameObjectに関連づける。


これで、ボタンが表示され、ボタンをクリックすると、デバイスがバイブレーションする。


2013年7月25日木曜日

UnityでVibrationをOnにする


Unityでタッチイベントをとる方法をベースに、VibrationをOnにするサンプルを作成する。

VibrationをOnにするには、Handheld.Vibrate(); を呼び出す事でVibrationを動作させる事ができる。

ソースコード
#pragma strict
function Start () {

}

function Update () {
if(Input.touchCount > 0){
  Camera.main.backgroundColor = Color.red;
  
  if(Input.GetTouch(0).phase == TouchPhase.Began){
  Handheld.Vibrate();
  }
  }
  else{
  Camera.main.backgroundColor = Color.blue;
  }

}

2013年7月23日火曜日

Google Glass向けARアプリを10分で作る方法

前回、UnityからのGoogle Glassにアプリを転送する事に成功したので、今度は10分でGoogle Glass向けのARアプリを開発してみる。

今回使うAR EngineはVuforia。Qualcomm社が提供する世界トップレベルの認識エンジンを搭載している。Vuforiaのエコシステムは、6万以上の登録開発者、4500本以上のアプリで採用されている。まさに、AR界のUnityだ。


それでは、VuforiaのサイトのDownload the SDKからVuforiaのUnity Extensionをダウンロードしてくる。


ダウンロードしたUnity Extensionをダブルクリックする


Unityが実行され、PackageをImportするか聞いてくるので、[Import]を選択しUnityに取り込む。



TagetManagerのページに移動し、認識オブジェクトを作成する。
Create Databaseボタンを選択する。

作成するDatabase名を入力する。
今回は、recognize_go という名前にする。


recognize_goというDatabaseができあがる。recognize_goを選択する。


Add Targetを選択し、認識した画像を選ぶ



しばらくprocessingの状況になるので、しばらく待つ。プレビューが表示されたら、goにチェックマークをいれて、Download Selected Targetsを選択する


Unity Editorをえらび、Database Nameを入力し、Createを押すと、ダウンロードが始まる。


ダウンロードした、recognize_go.unitypackage をダブルクリックして、Unityに取り込む。


ここからは、Vuforiaを組み込んでいく。Main Cameraを選択し、Command+Deleteで削除する。



AssetsのQualcomm Augmented Reality>Prefabsフォルダに移動し、ARCameraとImageTargetをシーンに追加する。




それでは、ImageTargetを選択し、Inspectorを設定する。



InspectorのImage Target Behaviorの部分のData Setに先ほど読み込んだ、recognize_goをセットする。




うまくいけば、画面は下記のように変更される。


次にARCameraの設定をおこなう。ARCameraを選択し、Inspectorを編集する。



Data Set Load Behaviourの項目のLoad Data Set recognを有効にし、Activateも有効にする。


Google Glass用なので、とりあえずTextが表示されるように改造する。GUI Textを用いる。
AssetsのQualcomm Augmented Reality>ScriptフォルダにあるDefaultTrackableEventHandler.csにGUI Textを追加できるようにし、認識中には表示、認識していない時には非表示にする。

まずは、最初で、GUIText guitextinfoとし、GUI Textを追加できるようにする。

/// <summary>
/// A custom handler that implements the ITrackableEventHandler interface.
/// </summary>
public class DefaultTrackableEventHandler : MonoBehaviour,
                                            ITrackableEventHandler
{
    #region PRIVATE_MEMBER_VARIABLES
public GUIText guitextinfo;
     private TrackableBehaviour mTrackableBehaviour;


......

OnTrackingFound()で、 guitextinfo.enabled = true;
OnTrackingLost()で、 guitextinfo.enabled = false;
とする。
.....

   private void OnTrackingFound()
    {
        Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true);
        Collider[] colliderComponents = GetComponentsInChildren<Collider>(true);

        // Enable rendering:
        foreach (Renderer component in rendererComponents)
        {
            component.enabled = true;
        }
         
        // Enable colliders:
        foreach (Collider component in colliderComponents)
        {
            component.enabled = true;
        }

        Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " found");
        
        guitextinfo.enabled = true;
    }


    private void OnTrackingLost()
    {
        Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true);
        Collider[] colliderComponents = GetComponentsInChildren<Collider>(true);
        // Disable rendering:
        foreach (Renderer component in rendererComponents)
        {
            component.enabled = false;
        }

        // Disable colliders:
        foreach (Collider component in colliderComponents)
        {
            component.enabled = false;
        }

        Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " lost");
        
        guitextinfo.enabled = false;
    }

    #endregion // PRIVATE_METHODS
}

それでは、文字列を表示するGUI Textを追加する。
GameObject > Create Other > GUI Text を選択する。


targetImageを選択し、Guitextinfoの部分にGUI Text をドラッグ&ドロップする。


最後にGUI Textを編集する。
GUI TextのFontサイズを50にし、Textに

name: GO
born: 2011
made by: renee french

と入力して、完成。

あとは、Google Glassで表示するためにLandscapeの設定する。
File > Build Settings...を選択し、Player Settings...を選択する。



Default OrientationをLandscape Leftに設定する。


Google Glassの画面は下記のように表示される。



最後に、Vuforiaの特性上、ぬいぐるみ系は特徴点がすくなく、認識精度があまり上げられない可能性がある。


https://developer.vuforia.com/resources/dev-guide/natural-features-and-rating