江上宿六です。
我ながら今回は面白みのない題材だとは思いますが、とりあえずやっていきます。
まぁ、ここまで作ったものだとただ単純にSphereが落ち続けるだけなので少し
手を加えてみることにします。 SphereGeneratorに追記します。
目標時間が経過した時に行われる処理の中です。 float型のpxとpyを宣言し、
それぞれRandom.Rangeで値を取得しています。 これは引数1と引数2の間の値を
ランダムに返してくれるもので、ここのpxの場合は-5.0f~5.0f、pzは0.0f~10.0fを
得る事が出来ます。
このRandom.Rangeは少し注意が必要で、float型の場合は引数2の値を
受け取ることが出来ますが、int型にした場合でRandom.Range(0,10)とした場合は
10を受け取ることが出来ません。 覚えておくと良いと思います。
だいたいこんな感じで違う位置に生成されるのが確認出来ると思います。
もう少し何かやってみましょうか。 ヒエラルキーのCreateから3DObject→
Planeを選択してPlaneを追加してください。 これは平面ですね。 出来たら
インスペクターから位置を(0,0,5)に設定し、ゲームを実行してみましょう。
Planeの上にSphereが溜まっていき、Sphere同士が衝突して転がっていき
Planeからはじき出されていく、というそこそこ愉快な感じのものが出来ました。
更に何かアレンジしてみましょうか。
少し前にやった様にCubeを配置し、それを操作キャラとして動かして
Sphereを押し出してやるとか、そういう感じの事をしましょう。
ではC#Scriptを追加し、Cube用のスクリプトを書きましょう。
6行目、mxとmzはGetAxisを使って傾きを取得するものです。
7行目のRigidbodyはこのスクリプト内でオブジェクトに追加されている
Rigidbodyを操作する為に宣言されたもので、宣言時はまだ空っぽです。
Start内でGetComponentを使ってRigidbodyを使える状態にしています。
Update内はGetAxisで取得した値を基に移動ベクトルを生成していて、
20行目で、this.rigidBody.positionにそのベクトルを加えています。 なんか
今まで通りにtransform.positionでも良さそうな気はしますが、Rigidbodyを
使っている場合はRigidBodyの方にした方が好ましいというのを見ましたので。
Sphereとぶつかる度にふわふわふらふらするCube君の出来上がりです。
こういう感じの環境と操作キャラが居るとなかなかそれだけでゲームっぽいです。
今回はこんな感じで。 次回は当たり判定関係で何かやりたいと思います。