Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ARコンテンツ作成ハンズオン@Panasonic -MYOで始めるウェアラブルセンシング-

ARコンテンツ作成ハンズオン@Panasonic -MYOで始めるウェアラブルセンシング-

2018/1/31に開催したハンズオンの資料

TakashiYoshinaga

January 31, 2018
Tweet

More Decks by TakashiYoshinaga

Other Decks in Technology

Transcript

  1. public class Controller : MonoBehaviour { // Start関数は初期化のために一度だけ実行される void Start

    () { } // Update関数は毎フレーム(◦◦ミリ秒間隔で)実行される void Update () { } } スクリプトの記述:イメージ このスクリプトで butterfly2を扱うよ ・・・ フレームごとに少しずつ移動
  2. スクリプトの記述:実装 using UnityEngine; using System.Collections; public class Controller : MonoBehaviour

    { GameObject butterfly; //蝶をプログラムで扱うための変数 void Start () { // Hierarchyにある蝶の情報を変数に覚えさせる butterfly = GameObject.Find("butterfly2"); } void Update () { butterfly.transform.Translate(0, 0, -0.02f, Space.Self); } } このモデルの場合・・・  蝶自身の前後方向はz軸で表される。  後ろ方向が+と定義されているため 前に進む場合は-をかける必要がある
  3. 移動のOn/Offの切り替え (1/2) using UnityEngine; using System.Collections; public class Controller :

    MonoBehaviour { GameObject butterfly; //蝶をプログラムで扱うための変数 bool forward = false; //移動のOn/Offを記録する変数 void Start () { butterfly = GameObject.Find("butterfly2"); } void Update () { butterfly.transform.Translate(0, 0, -0.02f, Space.Self); } } if(forward==true){ butterfly.transform.Translate(0, 0, -0.02f, Space.Self); } forwardがtrueの時だけ実行
  4. 移動のOn/Offの切り替え (2/2) GameObject butterfly; //蝶をプログラムで扱うための変数 bool forward = false; //移動のOn/Offを記録する変数

    void Start () { butterfly = GameObject.Find("butterfly2"); } void Update () { if (Input.GetMouseButtonUp(0)){ forward = !forward; //trueの時はfalse, falseの時はtrue } if(forward==true){ butterfly.transform.Translate(0, 0, -0.02f, Space.Self); } }
  5. Myoのデータ取得: スクリプトの記述 public class Controller : MonoBehaviour { // Start関数は初期化のために一度だけ実行される

    void Start () { } // Update関数は毎フレーム(◦◦ミリ秒間隔で)実行される void Update () { } } このスクリプトで Myoを扱うよ 今何してる? ・・・
  6. Myoの初期化 using UnityEngine; using System.Collections; using Thalmic.Myo; public class Controller

    : MonoBehaviour { GameObject butterfly; bool forward = false; ThalmicMyo myo; //Myoをプログラムで扱うための変数 void Start () { butterfly = GameObject.Find("butterfly2"); // 今接続されているMyoの情報を変数"myo"に覚えさせる myo = GameObject.Find("Myo").GetComponent<ThalmicMyo>(); } /*スペースの都合により以下省略*/
  7. Myoのデータ取得 public class Controller : MonoBehaviour { // Start関数は初期化のために一度だけ実行される void

    Start () { butterfly = GameObject.Find("butterfly2"); myo = GameObject.Find("Myo").GetComponent<ThalmicMyo>(); } // Update関数は毎フレーム(◦◦ミリ秒間隔で)実行される void Update () { } } 今何してる? ・・・
  8. Myoのデータ取得 ThalmicMyo myo; //Myoをプログラムで扱うための変数 void Start () { /*スペースの都合により省略*/ }

    void Update () { myo.pose if (Input.GetMouseButtonUp(0)){ forward = !forward; } if(forward==true){ butterfly.transform.Translate(0, 0, -0.02f, Space.Self); } } print(myo.pose); //現在の状態を取得して表示
  9. ダブルタップを用いた移動/停止の切り替え void Update () { print(myo.pose); if (Input.GetMouseButtonUp(0)){ forward =

    !forward; } if(forward==true){ butterfly.transform.Translate(0, 0, -0.02f, Space.Self); } } if ( ダブルタップをしたら ){ forward = !forward; } if (myo.pose==Thalmic.Myo.Pose.DoubleTap){ forward = !forward; } if文の条件を手の状態を用いたものに書き換える
  10. 特定動作のみの利用 void Update () { print(myo.pose); if (myo.pose==Thalmic.Myo.Pose.DoubleTap){ print(myo.pose); forward

    = !forward; } if(forward==true){ butterfly.transform.Translate(0, 0, -0.02f, Space.Self); } } 動作確認のためにprint(myo.pose)もif分の中に移動 移動
  11. 切り替わりのタイミングの認識 Thalmic.Myo.Pose lastPose; //前の状態を覚えておく変数 void Start () { butterfly =

    GameObject.Find("butterfly2"); myo = GameObject.Find("Myo").GetComponent<ThalmicMyo>(); } void Update () { if(myo.pose==Pose.DoubleTap){ print(myo.pose); //現在の状態を取得して表示 forward = !forward; } /*スペースの都合により省略*/ } if( 前の状態と異なる場合) { if(myo.pose==Pose.DoubleTap){ print(myo.pose); forward = !forward; } } if(myo.pose != lastPose) { //状態が切り替わったら下記を実行 lastPose=myo.pose; //最新の状態に更新 if(myo.pose==Thalmic.Myo.Pose.DoubleTap){ print(myo.pose); forward = !forward; } } Rest Rest DoubleTap DoubleTap DoubleTap Rest Rest ・・・・ → lastPose → lastPose
  12. CGの向きを制御する void Update () { if(myo.pose != lastPose) { //状態が切り替わったら下記を実行

    lastPose=myo.pose; //最新の状態に更新 if(myo.pose==Thalmic.Myo.Pose.DoubleTap){ print(myo.pose); forward = !forward; } } if(forward==true){ butterfly.transform.Translate(0, 0, -0.02f, Space.Self); } if(myo.pose == Thalmic.Myo.Pose.WaveIn){ butterfly.transform.Rotate( 回転角度 ); } } butterfly.transform.Rotate(0,-0.5f,0); x z y
  13. CGの向きを制御する void Update () { if(myo.pose != lastPose) { //状態が切り替わったら下記を実行

    lastPose=myo.pose; //最新の状態を記録 if(myo.pose==Thalmic.Myo.Pose.DoubleTap){ /*スペースの都合上省略*/ } } if(myo.pose == Thalmic.Myo.Pose.WaveIn){ butterfly.transform.Rotate(0,-0.5f,0); } else if(myo.pose == Thalmic.Myo.Pose.WaveOut){ butterfly.transform.Rotate(0, 0.5f,0); } }
  14. 蝶の高さを制御する void Update () { if(myo.pose != lastPose) { lastPose=myo.pose;

    /*スペースの都合上省略*/ } if(myo.pose == Thalmic.Myo.Pose.WaveIn){ butterfly.transform.Rotate(0,-0.5f,0); } else if(myo.pose == Thalmic.Myo.Pose.WaveOut){ butterfly.transform.Rotate(0, 0.5f,0); } if (myo.accelerometer.z > 0.8) { butterfly.transform.Translate(0, 0.02f, 0); } }
  15. 蝶の高さを制御する(再) void Update () { if(myo.pose != lastPose) { lastPose=myo.pose;

    /*スペースの都合上省略*/ } if(myo.pose == Pose.WaveIn){ butterfly.transform.Rotate(0,-0.5f,0); } else if(myo.pose == Pose.WaveOut){ butterfly.transform.Rotate(0, 0.5f,0); } if (myo.accelerometer.z > 0.8) //腕がだいたい上を向いたとき { butterfly.transform.Translate(0, 0.02f, 0); } }
  16. 蝶の高さを制御する void Update () { /*スペースの都合上省略*/ if(myo.pose == Thalmic.Myo.Pose.WaveIn){ butterfly.transform.Rotate(0,-0.5f,0);

    } else if(myo.pose == Thalmic.Myo.Pose.WaveOut){ butterfly.transform.Rotate(0, 0.5f,0); } if (myo.accelerometer.z > 0.8) { butterfly.transform.Translate(0, 0.02f, 0); } else if(myo.accelerometer.z < -0.8) { butterfly.transform.Translate(0, -0.02f, 0); } } z y -z方向に加速