More Related Content
Similar to ARコンテンツ作成勉強会:Myoを用いたVRコンテンツ開発 (20)
More from Takashi Yoshinaga (20)
ARコンテンツ作成勉強会:Myoを用いたVRコンテンツ開発
- 34. スクリプトの追加 (2/2)
① スクリプト名
② クリック
スクリプト(C#)が追加される
【ここまでの操作】
空のGameObjectを作成し,そこにスクリプトファイルを追加
→ Unityではオブジェクトの機能の1つとしてスクリプトが働く
- 36. public class Controller : MonoBehaviour {
// Start関数は初期化のために一度だけ実行される
void Start () {
}
// Update関数は毎フレーム(○○ミリ秒間隔で)実行される
void Update () {
}
}
スクリプトの記述:イメージ
このスクリプトで
butterfly2を扱うよ
・・・
フレームごとに少しずつ移動
- 37. スクリプトの記述:実装
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軸で表される。
後ろ方向が+と定義されているため
前に進む場合は-をかける必要がある
- 39. 移動の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の時だけ実行
- 40. 移動の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);
}
}
- 67. Myoのデータ取得: スクリプトの記述
public class Controller : MonoBehaviour {
// Start関数は初期化のために一度だけ実行される
void Start () {
}
// Update関数は毎フレーム(○○ミリ秒間隔で)実行される
void Update () {
}
}
このスクリプトで
Myoを扱うよ
今何してる?
・・・
- 68. 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>();
}
/*スペースの都合により以下省略*/
- 70. Myoのデータ取得
public class Controller : MonoBehaviour {
// Start関数は初期化のために一度だけ実行される
void Start () {
butterfly = GameObject.Find("butterfly2");
myo =
GameObject.Find("Myo").GetComponent<ThalmicMyo>();
}
// Update関数は毎フレーム(○○ミリ秒間隔で)実行される
void Update () {
}
}
今何してる?
・・・
- 71. 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); //現在の状態を取得して表示
- 73. ダブルタップを用いた移動/停止の切り替え
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==Pose.DoubleTap){
forward = !forward;
}
if文の条件を手の状態を用いたものに書き換える
- 74. 特定動作のみの利用
void Update () {
print(myo.pose);
if (myo.pose==Pose.DoubleTap){
print(myo.pose);
forward = !forward;
}
if(forward==true){
butterfly.transform.Translate(0, 0, -0.02f, Space.Self);
}
}
動作確認のためにprint(myo.pose)もif分の中に移動
移動
- 77. 切り替わりのタイミングの認識
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==Pose.DoubleTap){
print(myo.pose);
forward = !forward;
}
}
Rest
Rest
DoubleTap
DoubleTap
DoubleTap
Rest
Rest
・・・・
→ lastPose
→ lastPose
- 78. CGの向きを制御する
void Update () {
if(myo.pose != lastPose) { //状態が切り替わったら下記を実行
lastPose=myo.pose; //最新の状態に更新
if(myo.pose==Pose.DoubleTap){
print(myo.pose);
forward = !forward;
}
}
if(forward==true){
butterfly.transform.Translate(0, 0, -0.02f, Space.Self);
}
if(myo.pose == Pose.WaveIn){
butterfly.transform.Rotate( 回転角度 );
}
}
butterfly.transform.Rotate(0,-0.5f,0);
x
z
y
- 79. CGの向きを制御する
void Update () {
if(myo.pose != lastPose) { //状態が切り替わったら下記を実行
lastPose=myo.pose; //最新の状態を記録
if(myo.pose==Pose.DoubleTap){
/*スペースの都合上省略*/
}
}
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);
}
}
- 80. 蝶の高さを制御する
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);
}
}
- 81. 蝶の高さを制御する
void Update () {
/*スペースの都合上省略*/
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);
}
else if(myo.accelerometer.z < -0.8)
{
butterfly.transform.Translate(0, -0.02f, 0);
}
}
z
y
-z方向に加速