おもちゃラボ

Unityで遊びを作ってます

【Arduino】LEDを点滅させる

Javaなどのプログラムで一番始めに作るプログラムは、画面上に「Hello, Wolrd」と表示するプログラムが定番です。

Arduinoの場合は、このHello, Worldに相当するプログラムがLEDを点滅させるプログラムのようです。LEDをチカチカさせるから、通称Lチカといいます。

f:id:nn_hokuson:20170318161700j:plain

LEDを光らせる回路

LEDを光らせるためにはArduinoとLEDを接続するための回路が必要になります。
ただ、Arduinoにはデフォルトで13番ポートにLEDがつながっているので、これを使いましょう。

自分で回路を作る場合は、次の図のように13番ポートとLED、抵抗(330Ω程度)を接続して下さい。

f:id:nn_hokuson:20170312211621p:plain:w400

LEDには豆電球と違って極性があります。足の長い方をプラス側(今回の場合は13ピン側)に繋いで下さい。

f:id:nn_hokuson:20170318165506p:plain:w150

LEDを点滅させるプログラム

Arduinoで出来ることは基本的に次の2つだけです。

・ポートから指定した電圧を出力する
・ポートに入力されているの電圧を調べる

どんな複雑に見える回路も、基本的にはこの2つの組み合わせで作られています。こう書くと、なんか、簡単そうに感じてきますね〜!

今回はLEDを点滅させたいので、指定したポート(13番)から0Vと5Vを交互に出力します。次のプログラムを入力して下さい。

void setup()
{
        pinMode(13, OUTPUT);
}

void loop()
{
        digitalWrite(13, HIGH);
        delay(1000);
        digitalWrite(13, LOW);
        delay(1000);
}

setup関数はプログラム起動時に一度だけ実行されます。loop関数は何度も実行される関数です。

f:id:nn_hokuson:20170318164251p:plain:w150

pinMode関数で第一引数のポートを「出力」として使うか「入力」として使うかを指定しています。
ここではLEDがつながっている13番ポートを出力(OUTPUT)に指定しています。

loop関数では、「LEDを点灯」→「1秒停止」→「LEDを消灯」→「1秒停止」という処理を行っています。まずdigitalWrite関数を使って13番ポートの出力をHIGH(5V)にします。

続いてdelay関数を使って1秒間処理を止めています。delay関数の引数には処理を止める時間をms単位で指定します。

もう一度digitalWrite関数を使って13番ポートの出力をLOW(0V)にして1秒停止します。これを繰り返すことでLEDを点滅させています。

実行結果

上のプログラムを実行した結果がこちらになります。地味ですが自分の書いたプログラムでハードウエアを動かせると感動もひとしおですね〜

www.youtube.com

【Unity】XキーとZキーのショートカット使ってますか?

Unityのショートカットキーの中でもあまり知られていない(?)
XキーとZキーのショートカットを紹介したいと思いますー!

Xキー:World/Localの切り替え

オブジェクトを移動させるときにワールド座標系に従って動かすのか、ローカル座標系に従って動かすのかを切り替えることができます。

カメラの注視点は変えずにもう少し被写体に寄せたいんだけど・・・。
こんなときカメラが傾いていると、X方向に少し動かして、Z方向にも同じだけ動かして、と細かい微調整が必要になります。

f:id:nn_hokuson:20170317192453j:plain

そんなときにはXキー!
カメラの視線方向にしたがってカメラを移動できるようになります。

f:id:nn_hokuson:20170317192955g:plain

Zキー:Pivot/Centerの切り替え

オブジェクトを回転させるときの中心座標にピボットを使うか、オブジェクトの中心座標を使うかを切り替えることができます。

2Dゲームを作っていると、「足場を回転させてつなぎたい」ということが時々あります。

f:id:nn_hokuson:20170317193054j:plain

普通に回転させるとオブジェクトの中心座標が回転の中心になるので
足場がつながらない!なんてことになります。

f:id:nn_hokuson:20170317193127g:plain

そんなときにはZキー!
これで回転の中心をPivotに切り替えられ、簡単に足場をつなぐことが出来るようになります。

f:id:nn_hokuson:20170317193322g:plain

【Unity】ユニティちゃんをMecanimで歩かせる方法

ユニティちゃんをAsset Storeからダウンロードしてきたけれども、動かすのがむずかしい、locomotionはなんか複雑だし・・・という方は多いと思います。
locomotionは一通りの動きが揃っていて便利なのですが、簡単なアニメーションの実験をしたい場合は逆に不便だったりします。

この記事ではMecanimを使って簡単にユニティちゃんを歩かせる方法を紹介します。

f:id:nn_hokuson:20170315191111j:plain

ユニティちゃんのAnimation Controllerを作る

まずはAsset Storeでユニティちゃんをダウンロードしましょう。ダウンロード先は下記のURLになります。

f:id:nn_hokuson:20170315192332j:plain
https://www.assetstore.unity3d.com/jp/#!/content/18705

続いて、Assets/UnityChan/Modelsの中に入っているunitychanオブジェクトをシーンビューにドラッグ&ドロップして配置してください。

f:id:nn_hokuson:20170315191111j:plain

このユニティちゃんをMecanimで動かすために、ユニティちゃんにAnimatior Controllerをアタッチします。
プロジェクトビューで右クリックし、「unitychan」という名前のAnimator Controllerを作成して(名前は任意です)、ユニティちゃんのインスペクタに設定してください。

f:id:nn_hokuson:20170315193556j:plain:w500

これでユニティちゃんがuniychan Animator Controllerに従って動くようになります。
このAnimator Controllerの中身をMechanimで設定していきます。

ユニティちゃんが歩くようにMechanimを設定する

先ほど作成したunitychan Animator ControllerをダブルクリックしてMechanimの画面を開いてください。

アニメータービューで右クリックし、「Create State」→「Empty」を選択します。

f:id:nn_hokuson:20170315191151g:plain

インスペクタで、作成したステートの名前を「Walk」に変更し、Motionの欄は「WALK00_F」を選択してください。

f:id:nn_hokuson:20170315191402p:plain:w400

これにより、WalkステートではWALK00_Fのアニメーションが再生されるようになります。(FはたぶんForward・・・なはずです)

実行してユニティちゃんを歩かせる

これでMecanimの設定が完了したので、ゲームを実行してユニティちゃんを歩かせてみましょう。

f:id:nn_hokuson:20170315194506g:plain

歩くアニメーションが再生されましたね!
今はユニティちゃんの位置を移動するプログラムを書いていないので、ムーンウォーク状態ですが・・・

Nav Meshを使って歩かせる

とりあえずユニティちゃんを歩かせたいので、Nav Meshを使って手っ取り早く歩かせてみましょう。

Nav Meshは移動可能なゾーンとゴール地点を指定すれば、自動的に経路探索をしてオブジェクトを最短経路で動かすことができる仕組みです。

Nav Meshをの使い方はこちらの記事で紹介しています。合わせて参照してくださいね〜。

nn-hokuson.hatenablog.com


ここでは、フロアとキューブをstaticオブジェクトに指定して、NavMeshを作成しました。

f:id:nn_hokuson:20170315191827j:plain

ユニティちゃんを歩かせると、こんな感じになります。このようにMecanimとNav Meshを組み合わせれば、手っ取り早くユニティちゃんを歩かせることができます。
ユニティちゃんには歩くアニメーションだけではなく、走るアニメーションや、戦うアニメーションも用意されているので利用してみて下さい!

f:id:nn_hokuson:20170315194741g:plain