【Unity】2Dシューティングを作ってみる話 #8

記事をご覧いただき、誠にありがとうございます。
投稿主の無能です。

前回は、.exeファイルへのビルドと、Android向けの.apkファイルのビルドを行って動作確認をしました。

今回は、プレイヤーと弾に画像をあてていきたいと思います。

画像ファイルを用意する

プレイヤーと発射する弾に画像を設定するのですが、まずは画像を用意します。

イラストの素材は背景と同じくイラストACで探しました。
※画像の二次配布に抵触する可能性があるので、リンクを参考にしてください。


これならプレイヤーの機体と弾の画像も一緒になっているので、探す手間が省けます。

あとはプレイヤーと弾をそれぞれGimpで切り出せばインポートの準備完了です。

背景の画像をインポートした際に作成したSprites > Objectsフォルダにこれらの画像をインポートします。

プレイヤーの機体と弾の画像をインポートした

これらの画像をPlayerとPlayerBulletに設定していきます。

画像をオブジェクトに設定する

画像を設定していきますが、ここはちょっと覚える事があります。

まずはプレイヤーに画像を設定します。

PlayerのSprite RedererのSpriteに、先程インポートしたプレイヤーの機体の画像を設定します。

PlayerのSprite RedererのSpriteにインポートしたプレイヤーの機体の画像を設定する

画像を適用すると、90度傾いた状態になりました。

画像を適用

これは三角形の時に、右側を機首にするため傾けたものなので直します。

角度を修正

角度が直ったので、進行方向を向くようになりました。

でも、ちょっと大きいから小さくしたいですね。

Sizeを変更するのは基本的にNG

ここで、Sizeを修正して大きさを変えるのは基本的にやらないようにしましょう。

理由は、今のSizeが基準の1になっているからです。

何のこっちゃ?と思われるかもしれませんが、地味にゲーム全体に影響が出てきかねない話なので、覚えておいてください。

今のUnityの世界の大きさを1と仮定します。
ではUnityの世界を縮小して、0.5にしたとします。

Unityの世界が0.5倍縮小したので、他のゲームオブジェクト達も当然0.5倍縮小されます。

この時、もともと1だったものは0.5になりますが、1未満だったゲームオブジェクト達は更に縮小されます。
サイズを変更して0.5にしたゲームオブジェクトがあったとしたら、そのサイズは0.25まで縮小することになります。

もしこのゲームオブジェクトが基準となって世界を考えていたとすると、えらいミニマムな世界になってしまいます。

世界がミニマムになるだけならまだしも、当たり判定や物理演算なんかもやり直す必要が出てくる可能性もあります。

こうして安易にSizeを変更することによる弊害が、どんどん連鎖的に発生しかねない状態になってしまうので、基準の1は基本的に崩さずに、設定する画像を変更して対応するようにしましょう。

Pixels Per Unitを変更する

じゃあPlayerはこのままなのか?と言えばそうではなく、元の画像を変更すればいいだけです。

またGimpの作業…ではありません。

画像を拡縮する方法として、Pixels Per Unitを変更するものがあります。

インポートした画像のInspectorビューを見てください。

画像のInspectorビュー

この値は、1ユニットで表せるピクセル数を設定しています。

ユニット?ピクセル?となりますが、まずピクセルは、要はドット絵のドットです。

ユニットと言うのは、まずUnityの世界の長さの単位はメートル法で表されます

ですので、例えば原点を0とした場合、x方向(横方向)に5動いたもの(Transoformのpositionのxが5)があったら、原点から5m動いた、という事になります。

そしてPixels Pre Unitと言うのは、先程1ユニットで表せるピクセル数を設定しているといいました。

という事は、今Playerに設定している画像では、1ユニットで100個のピクセルが表せるという事になります。

つまり1m÷Pixels Pre Unitに設定されている数=100ということで、1ピクセルあたり1cmになります。

じゃあ、Pixels Pre Unitが大きくなる、ここでは200になればどうなるでしょうか。

1m÷200=0.005なので、1ピクセルあたり0.5cmになります。

結論として、1ユニットで表示できるピクセル数が多いと画像が小さくなり、ピクセル数が少ないと画像が大きくなる、ということになります。

ドット絵なども画素数が多ければ綺麗で、少なければ粗く感じます。
その感覚と同じです。

この事から、Sizeは1を基準に変更せず、Pixels Pre Unitの値を増減させて画像を拡縮させます。

…ちょっと分かり辛いかな。上手く説明出来なくてすみません。

では実際にPixels Pre Unitを256にして、右下のApplyで変更を決定します。

Pixels Pre Unitを256にして、右下のApplyで変更を決定する

すると画像が縮小されて、程よい大きさになりました。

画像が縮小された

あともう一つやっておくことがあります。

Colliderの設定

もう一つが、当たり判定となるColliderの調整です。
こちらは簡単に済みます。

まずはPlayerのPolygon Collider 2Dを見ると、三角形のままであることが分かります。

PlayerのPolygon Collider 2Dを見ると三角形のままである

これを直しておかないと、当たり判定が三角形でPlayerの機体を少々掠めても場所によってはセーフになってしまいます。

このColliderの修正方法は、右側の三点リーダーのResetをすればいいだけです。

右側の三点リーダーのResetをする

すると一発でPlayer全体を覆ってくれます。

ResetするとColliderが修正された

ただし、ResetしたことでIs Triggerもリセットされたのでチェックが外れています。
忘れずにチェックを付けましょう。

ResetしたことでIs Triggerもリセットされたので忘れずにチェックを付けておく

これからオブジェクトへ何かの画像を設定する時は、
  • 画像の拡縮はPixels Pre Unitで行う
  • アタッチしている場合はColliderを確認する
という事を忘れないようにしましょう。

では、弾も同じく画像を設定します。

弾の場合は、一度Prefabから出して設定します。

画像を適用させて、Circle Colliderを削除してPolygon Collider 2Dに付け替えました。

PlayerBulletの画像を変更しPolygon Collider 2Dに付け替えた

ここで設定した内容だと、Hierarchyビューに出ているこの一発のみが変更された弾になっています。

このPlayerBullet全てにこの変更を適用させたいので、Inspectorビューの右上にあるOverridesを押下して、中のApply Allを押します。

Inspectorビューの右上にあるOverridesを押下

中のApply Allを押す

これでPlayerBulletプレハブに行った変更すべてが適用されます。

そしたらHierarchyビューにあるPlayerBulletは削除します。

HierarchyビューにあるPlayerBulletを削除

ではゲームを実行して確認してみましょう。

変な位置から弾が発射されている

変な所から弾が発射されているので、PlayerFirePosを修正します。

Sprite Rendererをアクティブにして、ちょちょいですね。

では再びゲームを実行して確認します。

ゲーム実行画面

想定の位置から発射されました。

まとめ

今回は
  • プレイヤーと弾に画像を設定した
という事をやりました。

次回は、いよいよ敵を作っていきたいと思います。

では、また次回!

コメント