Unity備忘録13頁目「ランダム位置生成」

江上宿六です。

 

我ながら今回は面白みのない題材だとは思いますが、とりあえずやっていきます。

まぁ、ここまで作ったものだとただ単純にSphereが落ち続けるだけなので少し

手を加えてみることにします。 SphereGeneratorに追記します。

f:id:y6yegami:20180717150119p:plain

 目標時間が経過した時に行われる処理の中です。 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を受け取ることが出来ません。 覚えておくと良いと思います。

f:id:y6yegami:20180717151029p:plain

だいたいこんな感じで違う位置に生成されるのが確認出来ると思います。

もう少し何かやってみましょうか。 ヒエラルキーのCreateから3DObject→

Planeを選択してPlaneを追加してください。 これは平面ですね。 出来たら

インスペクターから位置を(0,0,5)に設定し、ゲームを実行してみましょう。

f:id:y6yegami:20180717151652p:plain

Planeの上にSphereが溜まっていき、Sphere同士が衝突して転がっていき

Planeからはじき出されていく、というそこそこ愉快な感じのものが出来ました。

 

更に何かアレンジしてみましょうか。

少し前にやった様にCubeを配置し、それを操作キャラとして動かして

Sphereを押し出してやるとか、そういう感じの事をしましょう。

ではC#Scriptを追加し、Cube用のスクリプトを書きましょう。 

f:id:y6yegami:20180718145650p:plain

6行目、mxとmzはGetAxisを使って傾きを取得するものです。

7行目のRigidbodyはこのスクリプト内でオブジェクトに追加されている

Rigidbodyを操作する為に宣言されたもので、宣言時はまだ空っぽです。

Start内でGetComponentを使ってRigidbodyを使える状態にしています。

 

Update内はGetAxisで取得した値を基に移動ベクトルを生成していて、

20行目で、this.rigidBody.positionにそのベクトルを加えています。 なんか

今まで通りにtransform.positionでも良さそうな気はしますが、Rigidbodyを

使っている場合はRigidBodyの方にした方が好ましいというのを見ましたので。

f:id:y6yegami:20180718144329p:plain

Sphereとぶつかる度にふわふわふらふらするCube君の出来上がりです。

こういう感じの環境と操作キャラが居るとなかなかそれだけでゲームっぽいです。

 

今回はこんな感じで。 次回は当たり判定関係で何かやりたいと思います。