カテゴリの最新記事

【イカ焼き備忘録】1-3.オブジェクトの配置

2017年9月17日

前回【ProjectとSceneの保存】

前回、シーンファイル[SC_main]を保存することができました。
このシーンファイルはゲームの”核”となる部分にする予定なので、今後はこのSC_mainシーンを中心にゲーム製作を行っていきます。


(イカを焼くの”核”となる部分。つまりメインゲーム部分)

さて、ゲームを作っていく上で、必要となる素材が全て揃った状態で作り始められることはまず無いと思われます。
大概はゲームを作りながら必要となる素材を作成していくスタイルになると思いますが、今回は講座みたいなものということで画像を用意しました。
勿論自分で用意した画像があればそちらを使っても問題ありません。
手元に素材が無い方は、どうぞこの”イカ”をお使いください。

イカの画像 利用規約
・他者に一切公開しない利用方法であれば自由に扱えるものとする
・この画像を利用した製作物を公開する場合、以下の内容を遵守すること
―・当ブログタイトルと当ブログURLを製作物に明記すること
―・この画像の再配布、および改変した画像の配布を禁止する
―・許可なく商用作品に利用しないこと
・この画像したことによるいかなる損害も当方は責任を負わないものとする
・画像をダウンロード及び利用する場合、上記の規約全てに同意したものとする

果たしてこの画像を使う人がいるかはわかりませんが、こういった免責事項はお約束のため書いておきます。
通常の利用なら違反することはないはずです。

画像ファイルのインポート

さて、使用する画像を用意できたでしょうか。
それでは画像をProject内にインポートしていきたいと思います。
と言っても画像をUnityの画面内にドラッグ&ドロップするだけでインポートが完了するので難しい作業ではありません。
ここでインポートした画像は今後”スプライト”と呼びます。
スプライトをインポートしたらSpritesフォルダに画像を入れておきましょう。
フォルダ分けをすることでプロジェクト内の視認性が上がります。
また、上記に用意した”イカの画像”のサイズは512x512pxなのですが、Unityの仕様なのか、スプライトのサイズは初期状態で2048pxとして扱われてしまうため、プロジェクト全体のファイルサイズが肥大する原因となります。
ファイルサイズを実際使うサイズまで落とし、容量を削減することを忘れないようにしましょう。


(フォルダを作りファイルを入れる。③でサイズを落とすのを忘れないように)

スプライトをシーンに配置する

インポートしたスプライトを実際にシーンに配置してみましょう。
これもさほど難しいことではなく、スプライトをシーンにドラッグするだけで配置することができます。
こうすることにより”イカのスプライトを持ったゲームオブジェクト”がシーンに生成されました。
今はまだ何もプログラムされていないためただ画像が表示されるだけのものですが、これらゲームオブジェクトに手を加えていくことでシーンを構築していくことになります。


(スプライトをシーンに配置。また、Rigidbody2Dコンポーネントを追加しておこう)

ところで、画面上に再生マークのようなものが見えるでしょうか。右向きの▲マークです、音楽を再生するマークのアレ。
ちょっと再生ボタンを押してみましょう。

画面のイカはどう表示されたでしょうか。
そのまま静止したままだったでしょうか。画面下に向かって落ちていったでしょうか。

画像の通りRigidbody2Dコンポーネントを追加していた場合は落下していき、追加していなかった場合は静止しているはずです。
このコンポーネントを付けたり外したりして何回か再生してみましょう。

Rigidbody2Dコンポーネント

Rigidbody2Dコンポーネントが何か、の前にComponentとは何なのかという話ですが、Conponentとは要素のことを指します。
シーンにただ配置したゲームオブジェクトは、位置の要素とスプライトの要素しか持ち合わせていません。
そこへ必要となる要素(Component)をどんどん追加していくことで、自分の必要とするゲームオブジェクトを作り上げていきます。

さて、ではRigidbody2Dコンポーネントとは何の要素を追加するものなのかというと、物理演算要素を追加するものとなります。
物理演算要素が追加されたため、再生時に重力に引かれて画面下に落ちていく、というわけです。

“イカを焼く”で横から流れてくるイカたちには、このRigidbody2Dコンポーネントが付与されています。
イメージを忘れてしまった方は実際のゲームをどうぞ。画面左から流れてくるイカたちのことです。
ついでに言うと飛んでいく串にもRigidbody2Dコンポーネントは付与されています。
ところで
「あれ、でもこのイカは横に流れるだけで重力に引かれているわけではないよね?物理演算機能は要らないんじゃないの?」
という疑問は浮かびましたでしょうか。浮かんだということにしましょう。
その疑問を解消するためには、ゲームオブジェクトを移動させる方法を知る必要があります。

オブジェクトを移動させる方法

ゲームオブジェクトを移動させるには、すごく大雑把に分けて二通りの方法があります。
「オブジェクトの座標を書き換える」
「オブジェクトに”力”を加える」
この二つがあります。

ではまず座標を書き換える方法について考えていきますが、”イカを焼く”のように常に右に動き続けるオブジェクトをこの方法で移動させようとすると
“ちょっと座標をずらす”→”ちょっと座標をずらす”→”ちょっと座標を……
といった感じで、常に座標を書き換え続けなければなりません。

オブジェクトに力を加えて動かす場合は、まず最初にオブジェクトにどの方向にどれぐらいの力で押し出すかを指定します。
そうすると物理演算に従ってオブジェクトは勝手に移動していきます。移動するたびに座標を書き換える必要はありません。
こちらの方が楽ですね。

ただし、このやり方は物理演算要素(Rigidbody2Dコンポーネント)を使用する必要があるため、必ずこのコンポーネントをオブジェクトに付与しなければなりません。
また、Rigidbody2Dコンポーネントには設定できる項目がいくつかあります。
その中にGravityScaleというものがあり、これを0にすることで無重力状態にすることができます。
“イカを焼く”で横にスライドしていくイカは、実は無重力空間で動くイカだったのです!

Rigidbody2Dコンポーネントを付与、GravityScaleを0に

最後に、Rigidbody2DコンポーネントのGravirtScaleを色々変えてシーンを実行してみましょう。
数値に合わせて色々な挙動をすると思います。


(GravityScaleが0なら、シーンを実行しても落下しない!)

それでは次回、いよいよスクリプト(プログラム)の実装をしていく……前に、プログラムを一切やったことない人、「変数って何?関数って何?」な感じな状態の人は、ちょっと変数について勉強してみましょう。
といっても素人知識が書いてあるだけですので、ちょっとでもプログラミングを齧ったことがある人は見る必要無いと思います。

次【ものすごく大雑把なプログラムの説明】