【第8回】角度から力の向きを計算するUnityチュートリアル

【第8回】角度から力の向きを計算するUnityチュートリアル

前回のチュートリアルでは、Inspectorウィンドウからメンバ変数の値を編集する方法をお送りしました。

その中で、力の向きを表すVector3型の変数も表示するようにしましたが、このままだと直感的に何度か分かりにくいですね。

なので、今回はX軸からの角度を入力できるようにして、直感的に角度を計算するチュートリアルです。

前回のチュートリアルはこちらから。

 

今回の目的

Inspectorウィンドウから力の向きを角度で指定できるようにします。

現状、Vector3型で直感的に分かりにくいので、スクリプト内で単位ベクトルに変換できるようにしましょ。

プロジェクトの準備

前回のチュートリアルで作成したプロジェクトをそのまま使います。

このページに先にたどり着いた方は、チュートリアルの初回から追っていただけるといいかもしれません。

今の力の向きの設定

まずは現在のInspectorウィンドウの様子から。

プロパティの編集
値を変更できるようになった

「Force Magnitude」はこれでもよさそうだけど、「Force Direction」はVector3型になっています。これじゃ向きが分かりづらいですね。いちいち頭でsin60°はいくつで……って計算するのはめんどくさいですし。

なので、できればfloat型で60度! って指定したいところ。

そこで、新たに[SerializeField]をつけたfloatのメンバ変数を用意します。forceDirectionはInspectorに表示しないように、[SerializeField]を外しましょ。内部では使用するので、変数自体は残します。

これで保存してUnityの画面に戻ると、Inspectorウィンドウに反映されます。

Inspectorに反映
Force Angleが表示された

 

角度を自動的に計算したい

float型の角度をInspectorから設定し、向きを表す単位ベクトルに変換しましょ。

昔懐かし物理の時間を思い出してもらいましょうか。初期位置からボールが飛び出す方向に矢印を引いた時、力の大きさを1とすれば、X軸方向の成分はcosθ、Y軸方向の成分はsinθで表せました。

力の分解
懐かしの物理

 

ここで、θはforceAngleと対応しています。とすると、forceAngleを使ってcosとsinを出してあげれば力の方向を導けそうですね。

スクリプトにするとこんな感じ。

前回からの変更点は、以下の通り。

  • CalcForceDirection()を追加
  • Update()からCalcForceDirection()を呼ぶ

CalcForceDirection()は力の向きを計算するメソッドです。Inspectorウィンドウで指定されたforceAngleを元にforceDirectionに値を設定しています。

cos、sinを計算するために、数学的計算を行うMathfクラスを使用しています。この中では角度ではなくラジアンで計算するため、Mathf.Deg2Radをかけてラジアンに変換しています。

X-Y軸での運動を考えているため、Z軸方向の成分は0とします。

Update()の中でCalcForceDirection()を呼ぶことで、Inspectorで値が変更された時にすぐ力の向きを計算することができます。

ゲームを実行して確認

スクリプトを保存してUnityに戻ったらゲームを実行して確認してみましょ。実行時にforceMagnitudeを14に設定しています。実は以前のforceDirectionは√2倍くらい大きかったんです。今回の計算で大きさが1になるのでこれをベースに計算するといい感じ。規格化は大事です。

角度を指定可能
角度を指定して飛ばすことができた

 

これで角度を指定してボールを飛ばすことができるようになりました。

やってみて気付いた人もいるかもしれませんが、135度とかにすると後ろに飛びます。Inspectorウィンドウからfloat型で直接値を入れるようになっているため、今の段階だとどの方向へも飛ばせちゃうんですよねぇ。

この後ゲームらしくするために、0から90度の範囲で入力できるようにしましょうか。

あと、着地して転がって行った後に、止まらず転がり続けるのも気になります。ゴルフっぽいゲームで球が止まらないとか、ゲームにならないよ……。

次はこの辺りを設定してみましょ。

まとめ

今回は角度を数字で指定して力の向きを算出するチュートリアルでした。ゲーム作成のチュートリアルというよりは物理とか数学のチュートリアルのような気もしますが、Mathfは便利なので慣れておくと超お役立ち。

次回はInspectorウィンドウでの入力できる値の範囲指定と、摩擦力の設定を行います。

アプリ公開までの攻略チャートを作りました!

CTA-IMAGE

「スマホ向けのアプリを作ってみたいけど、何から手を付けていいか分からない!」


そんなお悩みをお持ちの方向けに、todoがアプリをリリースした経験から手順や考慮すべき点をまとめたe-bookを作成しました。ゲーム作りはそれ自体がゲームのように楽しいプロセスなので、「攻略チャート」と名付けています。


アプリをリリースする観点から書いているので各アプリストア向けの作業が入っていますが、企画、設計、開発、テスト部分については他のプラットフォームでも使える知識が満載です。


無料で入手できるのでぜひお早めにゲットして、開発をブーストさせてください!