LoginSignup
0
0

More than 1 year has passed since last update.

2Dキャラクターを動かす原理

Posted at

【①】sprite(画像データ)を使ってゲームオブジェクト(player)を作成。

【②】playerの座標を設定する。

座標とは、
ゲームオブジェクトがシーンの中心(親がいない場合)、または親(親がいる場合)からの距離のことです。

3つの座標は以下の通りです:

Horizontal (x):横方向
Vertical (y) :縦方向
Depth (z):奥行き

今回は2Dゲームなのでzは覚えなくてオッケーです。

player の座標を設定するには:

  1. Hierarchy で、Main Camera GameObject を選択します。Inspector では、その位置が 0,0 になっているのがわかりますが、これは Unity の Main Camera GameObject のデフォルトの位置です。(今のところ、z 座標は無視してください)。

  2. x と y の値を 0 に変更します。 これで Main Camera GameObject がシーンの中心に位置するようになります。

  3. Hierarchy で、新しい Ruby GameObject を選択します。

  4. Inspector で、x の値を -2、y の値を 0 に設定します。 これで player は Main Camera と縦方向に並びますが、横方向には左側になります。(グラフの軸を考えるのに役立つかもしれません:マイナスの値はゲームオブジェクトを横軸(horizontal axis)で左に、縦軸(vertical axis)で下に移動させます)。

【③】Update 関数の調整

まずは、playerオブジェクトを動かせるようにします。

 void Update()
 {
    Vector2 position = transform.position;
    position.x = position.x + 0.1f;
    transform.position = position;
}

変数とは?
変数とは、コンピューターのメモリの中で名前を付ける場所のことです。後で、その名前を使って、そこに保存されている値を取り出すことができます。棚の上に置かれた箱のようなもので、表に名前が書かれていて、中には値が入っていると考えてください。

Vector2 変数って何?
変数名の前の最初の単語、Vector2 は変数の型です。型は、どのようなデータを格納したいかをコンピュータに伝えるので、コンピューターはメモリの適切な容量を得ることができます。Vector2 は、2 つの数値を格納するデータ型です。横(horizontal)位置に x、縦(vertical)位置に y、奥行き(depth)に z を使用する Inspector の Transform 値を覚えておいてください。この 3 つの数字が座標を形成します。このゲームは 2D なので、z 軸の位置を格納する必要がないので、ここでは Vector2 を使って x と y の位置だけを格納します。

Equals(=記号)について
Equals 記号は「右側にあるものを左側にあるものに格納する」ことを意味します。したがって、ここでは、Transform の現在の x と y の位置の値を格納するように位置変数に指示しています。

player の位置の取得
Transform も変数(あなたではなく Unity が作成したもの)で、スクリプトが置かれている GameObject の Transform コンポーネントが含まれています。
transform と position の間のドットを「含む」と考えると、ここでは、Transform 内に「含まれる」位置を取得しています。

まとめ
要約すると、Transform コンポーネントに含まれる position を Vector2 型の変数内に格納しています。これでメモリ内に「position」という名前の場所ができ、そこには GameObject の現在位置のコピーが入っています。

【④】GameObjectの移動
2 行目では、1 行目と同じように、何か別のものに「含まれている」ものにアクセスするためにドットを使っています:

 position.x = position.x + 0.1f;

Vector2 は 2 つの数値であるため、x と y を「含みます」。 ここでは、横位置である x の値にアクセスしています。
ゲームオブジェクトを少し右に移動させるには、x の値に 0.1 を加え、結果を x に戻します。
これでメモリ内の位置変数に 0.1 ユニット右にある x 座標が格納されました(正の値はゲームオブジェクトを右に、負の値は左に移動します)。

【⑤】GameObjectの新しい位置を格納する
3 行目では、その新しい Position を Transform の位置の内側に格納しました:

 transform.position = position;

この行の前は、用紙の一面で数学をするように、コピーを修正していただけでした。新しい結果が得られたので、それを Transform コンポーネントに返して、ゲームオブジェクトを 0.1 ユニット右に移動させることを実際に認識させる必要があります!

コンピューターはこの関数を新しいフレームごとに実行するので、オブジェクトは新しいフレームごとに最後のフレームに比べて 0.1 ユニット右に移動します。これにより、ゲームオブジェクトが連続的に右に移動しているような錯覚に陥ります。

  超初心者復習用です。これが分からないなら多分ゲーム作れない。勉強頑張るぞ(´・_・`)b
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0