【Unity1】ユニティちゃんを自動で移動!Sprite画像, velocity【ユニティちゃん縦スクロール1】
Unity5.1.1f1 Personal(2015年6月)
このコンテンツは、『ユニティちゃんライセンス』で提供されています
今回からUnityを使って、2Dのミニゲームを作っていきたいと思います~
縦にスクロールしていくアクションゲームを作ろうと思うのですが、今回はまずキャラクターであるユニティちゃんを、自動で移動させる処理を実装するところまで進めていきたいと思います〜
【目標】キャラクターを自動で移動させる!
とりあえず以下エッセンスを参照し、ProjectとSceneを作成しましょう〜Scene名は「Main」にします〜
さて、順を追って見ていきましょう〜
①ユニティちゃんをゲーム画面に表示させる
まずはキャラクターをゲーム画面に表示させようと思います〜
キャラクターはユニティちゃんを使わさせて頂きます~Unity道しるべ様の、ユニティちゃんの2D横スクロールアクション(その1:キャラ配置)【チュートリアル】からダウンロードできます〜ありがとうございます!
まずはダウンロードしたパッケージ(Unity-chan Dot(Co89) .unitypackage)を、Project欄へドラッグ&ドロップしてImportしましょう〜
ドラッグ&ドロップ!
Importボタンを押す
Importした画像はSpritesという名前のフォルダを作成し、そこに保存しておきましょう〜
Spritesフォルダを作成し保存
次にユニティちゃんを配置しましょう〜Importしたフォルダの中のユニティちゃん_待機というSprite画像を選択して下さい!
TextureTypeは、ただの画像として扱うか(Texture)、Unity2Dの機能を利用するか(2D and UI)選択できます〜今回は2D and UIにします〜デフォルトでなっているはずです!
SpriteModeはSprite画像を1枚の画像として扱うか(Single)、複数の画像に切り離して使うか(Multiple)選択できます〜今回はデフォルトでMultipleとなっており、待機画像は0〜7まで既に切り離してありますので、そのまま使わさせて頂きましょう〜
Sprite ModeをMultipleにした時に画像の切り離しをするには、Sprite Editor画面から行います〜1点修正があるので、ちょっと見てみましょう〜
Sprite Editorボタンをクリック
Sprite Editor画面 この画面で画像を切り離す
左上にあるSliceボタンを押して、実際に画像の切り離し作業を行います〜今回はPivotをCenterからBottomに変更したいので、以下のような設定にしSliceボタンを押して下さい〜
PivotをCenterからBottomに変更しておくと、後々ジャンプ機能を実装する時にユニティちゃんが地面に接しているか判定する時に役立ちますので、ここで先に設定しておきます〜
Inspectorビューに戻りまして、FilterModeはデフォルトのBilinearもしくはTrilinearだとブラーがかかり、かすんで見えるようになります〜今回はドット絵なのでPointにして、ドットをくっきりと表示させましょう〜
2DSprite画像については以下エッセンスでも詳しく紹介していますので、ご参照下さい〜
ユニティちゃん待機_0というSprite画像を、Hierarchy欄へドラッグ&ドロップし、名前をPlayerに変更しましょう〜
ドラッグ&ドロップ!
ついでにCubeとDirectional Lightを作成して、地面を作っておきます〜
地面とライトも作成しておく
②ユニティちゃんを地面に立たせる
Unity入門書を読むとだいたいここで、ユニティちゃんにRigidBodyとBoxColliderのコンポーネントを付けて重力をかけるのですが、2D用画像であるSpriteを扱う場合はAddComponent>Physics2Dから、RigidBody2DとBoxCollider2Dをつけます〜
そして、地面であるCubeに付いているBoxColliderを取り除き、BoxCollider2Dをつけます〜
Colliderは2Dなら2D同士、3D(無印)なら3D同士でしか衝突判定されないからです〜
PlayerにはRigidBody2DとBoxCollider2D(ColliderのOffsetとSizeは要変更)
CubeにはBoxCollider2Dをつける
この状態でゲームを実行すると、重力でユニティちゃんが地面に着陸します〜
着陸!立った!
③ユニティちゃんを自動で横に動かす
それではようやく、ユニティちゃんを動かすPlayerScriptを書いていきます~以下ソースです〜
Startメソッドにてrbという変数にGetComponent<Rigidbody2D>()という処理を格納しています〜
スクリプト内でRigidbody2Dに関する処理を行う場合、予めGetComponentにより明示的にコンポーネントを取得しておかないといけないルールなのですが、このようにStartメソッドで予め変数に取得しておいて、変数を使いまわせば、毎回GetComponentを行う必要がなくなります〜
この操作をキャッシュすると言い、何度もGetComponentを行わないので処理が軽くなります〜
Unity4まではrigidBody2D(頭文字が小文字)と書くだけで暗黙的にGetComponent<RigidBody2D>()を行ったのと同じ効果だったのですが、Unity5からは明示的に宣言しないと使えなくなってしまいました〜
velocityは速度を意味し、指定した方向へ指定した数値分オブジェクトを移動させます〜
今回moveSpeedに2を指定してあるので、X軸方向に2の力を毎フレームかけ続けているという意味です〜
ちなみにYにはvelocity.yを指定していますが、これは今の速度をそのまま入れているだけなので、重力の影響をそのままオブジェクトに反映します〜
【結果】
スィーン
無事動かすことができました~
まだまだ何も分からない状態ですが、少しずつ勉強していこうと思います〜
ありがとうございました~
***補足***
PlayerScriptにUpdateメソッドではなくFixedUpdateが使われています〜
Updateの場合は端末の処理能力により、フレーム数(1秒間に何回Updateを行うか。fpsと言います)が変わってしまいます〜しかし、FixedUpdateを使えばどの端末でも同じfpsで処理を行ってくれます〜
ボタン入力等の一瞬の処理はUpdateメソッドで、移動処理等の端末によって差異を出したくない定量的な処理はFixedUpdateメソッドを使うようにしましょう〜
ちなみにFixedUpdateはデフォルトでは50fpsに設定されていますが、Edit>ProjectSettings>TimeにあるFixedTimestepの値を変更することで調整できます〜
Timeから
FixedTimestepにて調整
【Unity開発1】キャラクターを自動で移動させる【ユニティちゃん横スクロールアクション2D:1/11】
【Unity開発1】壁にぶつかった時にキャラクターを反転させる【ユニティちゃん横スクロールアクション2D:2/11】
【Unity開発1】キャラクターをジャンプさせる!【ユニティちゃん横スクロールアクション2D:3/11】
【Unity開発1】キャラクターをカメラが追いかける!【ユニティちゃん横スクロールアクション2D:4/11】
【Unity開発1】uGUIを使って点数を表示する!【ユニティちゃん横スクロールアクション2D:5/11】
【Unity開発1】タイトル画面とゲームオーバー画面を作る!【ユニティちゃん横スクロール2D:6/11】
【Unity開発1】アニメーションを付ける!【ユニティちゃん横スクロールアクション2D:7/11】
【Unity開発1】バグ発見!無限にジャンプできちゃう!【ユニティちゃん横スクロールアクション2D:8/11】
【Unity開発1】ボタン長押しでジャンプ力を強くしたい!【ユニティちゃん横スクロール2D:9/11】
【Unity開発1】足場を下から突き抜けて、そのまま乗っかりたい!【ユニティちゃん横スクロールアクション2D:10/11】