以前、Unityを触ってみようということで、簡単なボール転がしのゲームや、ML-Agentsを用いた機械学習を作成してみました。
それからかなり期間が空いてしまい、またかなり忘れてしまいました(笑)
思い出しがてら何か作ってみようかなということで、ちょっと作ってみたいと思っていたブロック崩しを作ってみようと思います。
ブロック崩しで必要となるオブジェクトとしては・・・
- プレイヤー用のバーオブジェクト
- ボール
- ブロック
- 外側の枠
の4つになります。
ということで、まずはオブジェクトを適当に作成。
外側の枠は、100×100の大きさ。
そこに、壁用のCubeを4つ(厚さ1)をくっつけ、あとはブロックとボールとバーを配置。
あとはここから順に設定していくだけです。
(1) Ridigbodyの追加
まずはオブジェクトに物理運動の判定が必要なものにはその設定を追加。
Add ComponentでRegidbodyを追加。
これで物理運動が可能になります。
本当に簡単ですよね。
(2) スクリプト追加 (プレイヤー用バーオブジェクト)
そして次は、プレイヤー用バーオブジェクトのスクリプトから。
これは、左右に動けばいいので、
- 左を押したときに左に
- 右を押したときに右に
オブジェクトが動けばOKです。
(それ以外のキーが押されたときの実装は不要)
(*) Time.deltaTimeについては色々とややこしいので詳細は割愛します。
実際、Update関数はフレーム単位で呼ばれる関数。そのため、そのフレーム間で押した時間をかけないと、フレームの処理単位によって、動作が変わってしまいます。
(同じ時間だけキー入力したとしても、1フレーム当たりの間隔が短ければ、呼び出し回数が増え、その分移動が速くなる。逆に間隔が長ければ、呼び出し回数が減り、その分移動が遅くなってしまいます。)
ということでお試し。
うん、動きましたが、壁の厚みの分を計算していないのでめり込みますね(苦笑)
-50~50の端に厚さ1で壁を付けているので、左端の座標は-49、右端の座標は49になります。
プレイヤーオブジェクトは大きさ10。
オブジェクトの左端は(中心点-5)、右端は(中心点+5)で計算しないといけないので、判定は「-44」と「44」でやらないとダメでした。
いやー、このあたりの座標計算は本当に苦手です・・・(苦笑)
続きます。