ひつじを動かそう その2 のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- ひつじを動かそう その2 へ行く。
- 1 (2022-12-03 (土) 19:53:16)
- 2 (2022-12-06 (火) 13:33:53)
- 3 (2022-12-06 (火) 15:20:41)
- 4 (2022-12-06 (火) 16:22:28)
- 5 (2022-12-06 (火) 19:35:32)
- 6 (2022-12-12 (月) 20:40:41)
- 7 (2022-12-12 (月) 22:09:43)
- 8 (2022-12-13 (火) 15:30:09)
- 9 (2022-12-20 (火) 14:11:37)
- 10 (2022-12-20 (火) 18:46:24)
- 11 (2022-12-20 (火) 20:38:03)
- 12 (2022-12-25 (日) 23:19:42)
- 13 (2023-01-10 (火) 14:11:40)
- 14 (2023-04-27 (木) 16:08:12)
- 15 (2023-04-28 (金) 07:21:41)
- 16 (2023-05-01 (月) 09:37:48)
- 17 (2023-05-01 (月) 22:30:03)
- 18 (2023-05-02 (火) 01:35:14)
- 19 (2023-05-02 (火) 20:24:09)
contents
はじめに
ステージを作るの続きです。
br
これまでに羊をキー入力で操作できるようにして、ステージまで制作しました。
しかし今のままでは、ひつじの動きとステージがあっていませんね。
そのでこのページでは、ゲームに合わせたひつじの動きの完成版を作りましょう。
br
本格的にひつじを動かそう
ステップ2:少しずつ動かしてみよう
br
これだと、一瞬での移動になってしまいます。
ということで次は、少しずつ移動できるように改良してみましょう。
br
geshi
br
次は、一旦「void Start()」の中身を消して、「void Update()」の中身を上のように変えてください。
br
「void Update()」はそのオブジェクトがゲームに出現してから毎フレーム呼び出されるメゾットです。
フレームとは、アニメーションのコマ割り、パラパラ漫画のようなもので、画像の切り替わりの間隔のことです。
先ほどと同様、ひつじは最初からいますので、ゲームが開始したら毎フレームで「void Update()」の中身が実行されます。
中身についてみていくと、1行目と4行目はさっきと同じですね。
変わったのは2、3行目で、「現在の変数のxy座標にそれぞれ0.01足す」というものです。
ちなみに、数値の後にある"f"は数値がfloat型(少数の型)であることを識別するためにつけています。
br
まとめると、「ゲームが開始してから毎フレームごとに、xy座標がそれぞれ0.01ずつ増えていく」となります。
br
実際動かしてみると、少しずつ右上に移動するようになるかと思います。
br
ステップ3:スピード調節をしよう
br
今は、ひつじのスピードの係数は0.01固定ですね。
次は、スピードをインスペクターから自由に調節できるように改良してみましょう。
br
geshi
br
「void Start()」の上と、「void Update()」の中身をこのように変えます。
br
3行目では、float型(小数を扱う型)として"speed"という名前の変数を定義します。
変数は、データを保存しておく入れ物のようなものです。
今回は予め0.01fを初期値として入れておきます。
ところで、前にある"public"は、そこで定義UnityEditerのインスペクターからspeedの値を変更できるようになる合言葉のようなものです。覚えておいてください。
br
14,15行目では、数値を変数に置き換えています。
こうすることで、これまでは0.01で固定だったものがspeedに入れる数値を変えることで変えられるようになりました。
br
実際にひつじのインスペクターからspeedの数値を変えて、ゲームを開始してみましょう。
ひつじのスピードは変わったでしょうか。
br
ステップ4:キー入力で操作できるようにしよう
br
今のままでは、ずっと同じ方向に行くばかりです。
そこで、次はひつじをキー入力で操作できるようにします。
br
geshi
br
これまでは、Update文が呼び出されるたびに無条件で"pos"を増加させてきましたが、
今回は「特定のキーが入力されたら」という条件が満たされていれば"pos"を変化させる、という風に命令の実行に条件を設けたいわけです。
そこで使われるのがif文になります。
if文の書き方は、
geshi
と、なっていて、
条件文が満たされていれば(条件文の返り値が"true"であれば){}の中の命令文が実行され、
条件文が満たされていなければ(条件文の返り値が"false"であれば){}の中の命令文がは無視されるようになっています。
br
今回の例を見ていくと、
"Input.GetKey (KeyCode.D)"というのが、Dキーが入力されれば"true"、されていなければ"false"が返されるため、
Dキーを押していると、"pos"のx座標が"speed"の大きさ分増えるようになり、
"Input.GetKey (KeyCode.A)"というのが、Aキーが入力されれば"true"、されていなければ"false"が返されるため、
Aキーを押していると、"pos"のx座標が"speed"の大きさ分減るようになります。
何もキーを押していないと、どちらのif文の条件式も満たされないので、"pos"の値は変化しないことになります。
br
これを実行してみると、
ひつじはDキーを押している間は右に、Aキーを押している間は左に移動して、何も押していないと動かないようになったはずです。
("speed"が正の数の時。負の数の時は左右逆に。インスペクターから正の数に直そう!)