Unityで基本的なAndroidゲームを作成する方法

この同様のチュートリアルでは、基本的なものを作成する方法について説明します。 アンドロイド Unityを使用したゲーム。



要件:

  • Unity
  • NotePad ++のような優れたテキストエディタ(オプションですが推奨)
  • Android SDK
まだお持ちでない場合は、UnitySDKとAndroidSDKをダウンロードしてインストールすることから始めてください。 Android環境内でゲームのAPKをテストできるように、AndroidSDKが必要です。

Unityを起動し、新しいプロジェクトを作成します。 2Dプロジェクトにします。



よく知っておくべきいくつかのパネルがあります–すべてのシーン要素を含む階層パネル(シーン=現在作業している「レベル」)。次に、エディター内でゲームをプレイ/テストするために使用される[ゲーム]タブがあり、右側には、照明や物理などのさまざまなものを編集するインスペクターパネルがあります。



私たちが最初にやりたいことは、スプライトを作成することです–これが私たちの主人公(私たちが制御する)になります。目で正方形を描くように独自のスプライトを描くことも、インターネットからスプライトを取得することもできます。それが.PNGファイル(透明な背景)であることを確認してください。



スプライトをメインシーンウィンドウ(最大のウィンドウ)にドラッグアンドドロップします。これは、左側の[階層]パネルにも表示されます。

そこで、いくつかのプラットフォームを作成します。壁やその他のプラットフォームを作成するために簡単にサイズを変更できるため、これらは単純な正方形にすることができます。

したがって、新しい正方形の「スプライト」を作成し、スプライトキャラクターの場合と同じように、シーンウィンドウにドラッグアンドドロップするだけです。



次に、Unityにメインキャラクターに物理を与えるように指示する必要があります。メインのスプライトキャラクターをクリックし(シーンウィンドウで青色で強調表示されるはずです)、インスペクターパネルで「GameObjects」を探します。

「コンポーネントの追加>物理2D> RigidBody2D」をクリックします。これにより、スプライトに物理演算が自動的に追加されます。これがなければ、別のSDKでスクリプトを作成する必要がありました。

メインスプライトキャラクターが制御不能に回転するのを防ぎたいので、インスペクターパネルで[コンストレイント]タブを見つけ(メインスプライトが[シーン]ウィンドウで強調表示されたまま)、[回転Zをフリーズ]チェックボックスをオンにします。

「再生」ボタンを押すと、メインのスプライトキャラクターが空から落ちて、際限なく落ちるはずです。後で処理しますが、物理を簡単に適用できたことに注意してください。適用した物理学は、適用されている形状によって異なります。たとえば、同じ物理学を球に適用した場合、球は転がります。

また、キャラクターが回転したり自由に動き回ったりしないように、向きを修正したいと思います。プレーヤーを選択した状態でインスペクターで「制約」を見つけ、チェックボックスをオンにして回転Zをフリーズします。もう一度[再生]をクリックすると、プレーヤーが空から無限の運命に落ちることがわかります。

メインのスプライトキャラクターが際限なく落下するのを防ぐために、コライダーを追加する必要があります。これは基本的に、メインのスプライトキャラクターに追加するシェイプのソリッドアウトラインです。メインのスプライトキャラクターを強調表示し、[コンポーネントの追加]> [Physics 2D]> [BoxCollider2D]をクリックします。

ここで、前に作成したプラットフォームでまったく同じことを行います。これで、メインのスプライトキャラクターがプラットフォームと「衝突」し、そこにとどまるはずです。

そこで、カメラがメインのスプライトキャラクターに追従することを確認したいと思います。シーン内には、すでにカメラオブジェクトが存在しているはずです。これをドラッグしたい の上に メインのスプライトキャラクター。

これは、作成する場合に特に重要です。 3Dベースのランナー 、 何かのようなもの スロープ カメラをメインのゲームオブジェクト(メインのスプライトキャラクター)の後ろに常に配置する必要がある場合。

次に、[階層]パネルに移動し、GameObjectsのリストで、カメラをドラッグします。 下に メインのスプライトキャラクター(Player GameObject)。これにより、メインのスプライトキャラクターが「 親' カメラの。したがって、Player GameObjectが画面上を移動するときは常に、カメラが追従する必要があります。

したがって、このゲームチュートリアルでは、次のような基本的なエンドレスランナータイプのゲームを作成します。 実行3 、主人公が画面を横切って障害物をかわす(または障害物にぶつかった場合は「ゲームオーバー」)。これにはいくつかのスクリプトが必要です。そのほとんどはこのガイドで提供されます。

「アセット」フォルダを右クリックして、新しいフォルダを作成します–名前を付けます スクリプト 。次に、この新しいフォルダーを右クリックし、[作成]> [C#スクリプト]をクリックして名前を付けます。 PlayerControls 。このスクリプトは、メインのスプライトキャラクターの動作を定義します。

この新しいスクリプトをダブルクリックすると、 すべき Visual Studioで開きます–あるいは(そして私の個人的な好みで)、NotePad ++のようなもので編集することができます。

スクリプトファイルには、すでに少しの「ボイラープレート」コードが含まれているはずです。基本的に、これはそのままにするか、ニーズに合わせて調整する必要があるスクリプトであり、時間を大幅に節約できます。そこで、新しいオブジェクトを追加します。

境界線より上voidStart():

公衆 Rigidbody2D rb;

追加する必要のあるコードの次のビットはStart()内にあり、剛体を見つけるために使用されます。基本的に、GameObjects(メインのスプライトキャラクター)にアタッチした物理演算とStartを見つけるようにUnityに指示しています。 ()は、新しいオブジェクトまたはスクリプトが作成されたときに実行されます。

次に、物理オブジェクトを見つけます。

rb = GetComponent< Rigidbody2D >();

そして、Update()内にこの行を追加します

rb.velocity = 新着 Vector2(3、rb.velocity.y);

Update()が行うことは常に更新されるため、そこに追加されたコードはすべて継続的に実行されます(オブジェクトが破棄されない限り)。つまり、Y軸で同じ速度(rb.velocity.y)を使用し、水平軸で3の速度を使用して、剛体に新しいベクトルを持たせるようにスクリプトに指示します。将来的には、「 FixedUpdate() ’ スクリプトの更新/更新量を制御できるため、これは似ていますが異なります。

スクリプトを保存してUnityに戻り、メインのスプライトキャラクターをクリックしてハイライトします。インスペクターパネルで、[コンポーネントの追加]> [スクリプト]に移動し、保存したスクリプトを追加します。これで、[再生]ボタンをクリックすると、メインのスプライトキャラクターがプラットフォームの端に向かって継続的に移動するはずです。

プレーヤー入力コントロールの作成

これは障害物のある無限のランナースタイルのゲームであるため、「ジャンプ」ボタンなどのプレーヤー用のコントロールを追加する必要があります。

以前からスクリプトを再度開き、次のコードを追加します。

 もし (Input.GetMouseButtonDown(0)){rb.velocity = 新着 Vector2(rb.velocity.x、5); }

これをUpdate()メソッド内に配置します。基本的には、プレーヤーがマウスボタン(Androidではスクリーンタップとして変換されます)をクリックすると、メインのスプライトキャラクターが「ジャンプする」ことをUnityに通知します。 ' 空の上に。これは、Y軸に値5の速度を追加したためです(値が大きいほど、もちろんジャンプが大きくなります)。

コーディングにあまり詳しくない場合は、 場合 ステートメント理由 場合 基本的には「するかしないか」のような指示です–文字通り これが発生した場合は、このコマンドを実行してください 。したがって、プレーヤーがマウスをクリックしていない(またはAndroid画面をタップしていない)場合は、明らかにスクリプトは実行されません。

続行する前に、「再生」ボタンをクリックして、正しく機能することを確認してください。

次に、障害物(メインキャラクターのスプライトを「破壊」する可能性があります)、ゲームスコア、および「ゲームオーバー」メニューを追加します。

これまでにゲームをテストした場合、これまでに作成した唯一の問題は、作成した「ジャンプ」ボタンを押すと、接地されているかどうかに関係なくキャラクターがジャンプすることです。これは基本的にゆるい鳥であり、のようなランナーではありません。欲しい。しかし、それを修正します。

スクリプトに、このコードを追加します 上記 Update()メソッド:

 公衆 GroundCheckを変換します。 公衆 startPositionを変換します。 公衆   浮く GroundCheckRadius; 公衆 LayerMask whatIsGround; 民間   ブール 地面に;次に、この次の行を上記のUpdateメソッドに追加します。 もし ステートメント:onGround = Physics2D.OverlapCircle(groundCheck.position、groundCheckRadius、whatIsGround);次に、この次の行を変更して「&& onGround」を含めます もし (Input.GetMouseButtonDown(0)&& onGround){したがって、スクリプト全体は基本的に次のようになります。 公衆   クラス   PlayerControlsMonoBehaviour {{ 公衆 Rigidbody2D rb; 公衆 GroundCheckを変換します。 公衆 startPositionを変換します。 公衆   浮く GroundCheckRadius; 公衆 LayerMask whatIsGround; 民間   ブール 地面に; ボイド   開始 (){rb = GetComponent(); } ボイド   更新 (){rb.velocity = 新着 Vector2(3、rb.velocity.y); onGround = Physics2D.OverlapCircle(groundCheck.position、groundCheckRadius、whatIsGround); もし (Input.GetMouseButtonDown(0)&& onGround){rb.velocity = 新着 Vector2(rb.velocity.x、5); }}}

私たちが行ったことを説明するために、ゲームの世界の空間での位置を意味する新しい「変換」を作成しました。半径を設定し、半径が「地面」レイヤーと重なっているかどうかを確認するようにUnityに指示しています。したがって、半径が「地面」と同期している場合、キャラクターはジャンプできるはずです。ジャンプからすでに空中にいるので、再びジャンプすることはできないはずです。基本的に、 地面に 本当になります もし 名前の付いた変換 GroundCheck 地層と重なっています。うまくいけば、それは理にかなっています。

スクリプトを保存してUnityに戻ると、プレーヤーを強調表示した後、インスペクターにオプションが追加されていることがわかります。これらはパブリック変数であり、好みに合わせて調整できます。

次に、階層を右クリックして新しい空のオブジェクトを作成し、それをドラッグして、メインシーンウィンドウのメインキャラクタースプライトの下に配置します。この空のオブジェクトを、床を検出する場所に配置します。オブジェクトの名前を「CheckGround」に変更し、前にカメラで行ったように、プレーヤーのゲームオブジェクトの下にドラッグします(オブジェクト間に親子関係を作成するため)。これで、空のオブジェクトはカメラと同じように主人公のスプライトに従い、床の距離を継続的にチェックします。cam

次に、メインキャラクターのスプライトを選択し、インスペクターパネルに移動します。CheckGroundオブジェクトを「groundCheck」というスペースにドラッグします。 「変換」の位置は、この新しいオブジェクトの位置と同じである必要があり、「半径」と表示されている場合は0.1にします。

グラウンドレイヤーを定義する必要があります。地面の地形を選択し、インスペクターで[レイヤー:デフォルト]のボタン(ドロップダウンボックス)を見つけて、[レイヤーを追加]を選択するだけです。

次に、プラットフォームのレイヤーとして「グラウンド」を選択し、ゲームウィンドウ内の他のプラットフォームに対してこれを繰り返します。メインキャラクターのスプライトオブジェクトに「グラウンドとは」と表示されている場合は、グラウンドレイヤーも選択します。

私たちが行ったことは、チェックを実行するようにプレーヤースクリプトに指示することです– もし 画面上の小さな点がレイヤーに一致するものと重なっている場合、これが当てはまる場合にのみキャラクターがジャンプします。

衝突とゲームメニューのゲームオーバー

まとめると、最後にやりたいことは、A:障害物との衝突でゲームオーバーになるようにすること、B:もう一度プレイボタンが付いた「ゲームオーバー」メニュー画面を作成することです。

基本的にやりたいことは次のとおりです。

  1. 追加する プレーヤー オブジェクトを割り当て、 リジッドボディコライダー それにあなたの選択の。
  2. 追加します オブジェクトを割り当て、 リジッドボディコライダー それにあなたの選択の。 (およびオプションで、追加 「敵」タグ それに)
  3. 新しいを作成します C#スクリプト にコンポーネントとして追加します プレーヤー (または、プレーヤーに添付されているスクリプトを使用します。既にスクリプトがある場合は、新しいスクリプトを作成する必要はありません)
  4. これをスクリプトに追加します。
ボイド OnCollisionEnter (( 衝突 coll){ デバッグログ ('衝突'); //衝突が登録されているかどうかを確認します。機能する場合は、この行を削除できます if(coll.gameobject。 鬼ごっこ == '敵'){ //プレーヤーが衝突したオブジェクトに「敵」というタグがあるかどうかを確認します