ブルーノのC#プログラミング & unity勉強日記

プログラミング素人、ブルーノの自主勉強ノートです。他のプログラミングを勉強したい方の助けになれば幸いです。その他趣味の雑記もしていきたいです

Unityスクリプト / 入力編(2/2)

f:id:covory10101101276:20180420220448j:plain

オカバンゴ・デルタ - ボツワナ

みなさんこんにちは🌚

 いきなり夏みたいな暑さで溶けそうなブルーノです。少し家を空けたら家の外より中の方が暑くなっていました🤑

さて今回は前回に引き続きUnityの入力について、少し特殊な入力方法について勉強していきます。

 

インプットマネージャー / Input Manager

Unityには、インプットマネージャーと呼ばれる機能があり、これを使うと複数の入力デバイスからの操作を1つのコマンドで設定することができます。簡単に説明すると、例えば「垂直方向」という名前をつけてその操作方法の中身を作っておけば、PSのコントローラーでもGCのコントローラーでも垂直方向キーにこの「垂直方向」インプットマネージャーを適応すれば微妙な調整や検証もいらずに直感的に操作方法を当てることができます。もう一つの特徴としては、単純にON・OFFで操作しないカーブや移動といった動作を滑らかに自然にしてくれる効果があります。百聞は一見に如かず ↓

f:id:covory10101101276:20180422161912p:plain

インプットマネージャーは[Edit]→[Project Setting]→[Input]から設定します

f:id:covory10101101276:20180422162014p:plain

色々メニューがありますが、[Horizontal]を覗いてみましょう。

AxisのSizeはこの入力の設定の数ですね。デフォルトでは18個入っているようです。足したい場合はこの値を増やしてリストを増やします。ちなみに個々の設定を仮想軸と言い、2方向の入力の仕方を設定します。(水平や垂直など。1方向でも可)

では上から順に各項目を説明します

Name: この仮想軸の名前を決めます。

Descriptive Name:仮想軸の正方向の説明です。ゲームランチャーでボタンを割り当てる際に表示されます。

Descrictive Negative:負方向の説明になります

Negative Button:負方向のボタンを設定できます

Positive Bottun:正方向のボタンを設定できます

Alt Negative Bottun:負方向の予備を設定できます

Alt Positive Bottun:正方向の予備を設定できます

Gravity:ボタンを話したときにどれくらいの速度で0に戻ろうとするかを設定します。大きいほどすぐ0に戻ります

Dead:0の範囲を設定します。つまり絶対値が0以上の値を入力しておけばそれ以下の時は反応しなくなります。

Sensitivity:反応の感度です。高ければすぐに反応し、低ければ鈍くなります。

Snap:反対方向の入力をされた時、値をすぐに0から始めるかを設定できます。

Invert:正負の方向を逆にします。

Type:仮想軸の操作を適応するデバイスの種類を設定します。

Axis:方向を指定します。例えば上のTypeでマウスの仮想軸を[X axis]に設定していた場合、カーソルを水平方向に移動した場合反応します。

Joy Num:コントローラーの番号を指定します。デフォルトでは全てのコントローラーを受け付けます。

そして設定した仮想軸を扱うにはGetAxis()メソッドを使用します 

GetAxis()メソッド

public static float GetAxis(string axisName)

 axisNameパラメータに使用する仮想軸の名前を記述します。例を書いてみます。

f:id:covory10101101276:20180422202359p:plain

とてもわかりやすい。だからGetAxisメソッドの中はstring型で戻り値はfloatなんですね。たまに使うことはありましたが疑問に思っていました。

f:id:covory10101101276:20180422202518p:plain

わかりにくいですが、キーを押した瞬間からは少しだけ加速し、離してから滑らかに停止します。

 

加速度

バイスの動きを感知する加速度センサーは今やどんなあらゆるケータイに搭載されており、ゲーム機にもその機能を取り入れたものはどんどん出ています。いまいちその使い方に成功したように思えるゲームを私はあまり知らないのですが、新しい機能はどんどん開拓してみたいですね。

accelerationプロパティは現在の加速度をVector3型で取得できるプロパティです。

f:id:covory10101101276:20180422210815p:plain

そのままオブジェクトのRotateに適用できるので設定は楽ですね。

f:id:covory10101101276:20180422210826p:plain

IPhoneを振るとその方向によってCubeも異なる方向へ回転し始めます。操気弾を使ってるみたいで気分が良いです。

 

ジャイロスコープ

加速度センサーではデバイスの動きを感知することはできますが、傾きは感知されていません。一般的にスマホなどの傾けて遊ぶゲームは加速度センサーよりもこちらのジャイロスコープの方が使われているのではないでしょうか。

ジャイロスコープから得られる情報はgyroプロパティから取得することができます。

gyroプロパティ

public static Gyroscope gyro { get; }

このプロパティはジャイロスコープからの情報をUnityEngine.Gyroscopeクラスオブジェクトを返します。

なお、デフォルトではジャイロスコープの機能はOFFになっているのでスクリプトから利用する場合はまずenabledプロパティで有効にします。

enabledプロパティ

public bool enabled { get; set; }

 このプロパティにtrueがセットされていればジャイロスコープの情報を得ることができます。そしていよいよ、現在のデバイスの姿勢をattitudeプロパティから取得します。

attitudeプロパティ

public Quaterion attitude { get; }

 実際に作ってみましょう

f:id:covory10101101276:20180423202254p:plain

25行目で一度Quaterion型の変数anglesに角度を格納し、その中の数値をGUIに表示します

f:id:covory10101101276:20180423202451p:plain

バイスを傾けるとそれに応じてCubeも傾きました。意思を持ってるみたいで面白いですね。今回はここまでにしておきます。

 

最近よく自分で料理を作ってみようとチャレンジしているのですが結局煮るか炒めるかになってしまうんですよね。なんかワンランク上のおしゃれな料理入門に最適な料理ってないですかねー🤔