Unityに関連する記事です

 ここでは以下の手順で進めていきます。

 PlayerControllerクラスの修正
 ⊃靴靴ぅ好リプト(SpeedItem)の作成
 新しいゲームオブジェクト(SpeedUp_Item)の作成
 Playerゲームオブジェクトの修正


PlayerControllerスクリプトの修正

 先ほどPlayerControolerクラスに、移動速度用にmoveSpeed変数が追加しました。
ここではそのmoveSpeed変数を変更するための関数を用意し、その関数内でmoveSpeedを変更する処理を用意していきます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    private float moveSpeed;

    // Start is called before the first frame update
    void Start()
    {
        moveSpeed = 0.05f;
    }

    // Update is called once per frame
    void Update()
    {    
        // 左矢印が押された時
        if(Input.GetKey(KeyCode.LeftArrow))
        {
                // 左に「3」動かす
                transform.Translate(-moveSpeed, 0, 0);   
        }
        // 右矢印が押された時
        if(Input.GetKey(KeyCode.RightArrow))
        {
                // 右に「3」動かす
                transform.Translate(moveSpeed, 0, 0);   
        }
    }

    /* 以下を追記します */

    /// <summary>
    /// 移動速度を変更する
    /// ItemSpeedクラスから呼び出される
    /// </summary>
    public void ChangeMoveSpeed(float newMoveSpeed) {
        moveSpeed = newMoveSpeed;
        Debug.Log(moveSpeed);
    }
 
    /* ここまで */
}

⊃靴靴ぅ好リプト(SpeedItem)の作成


 PlayerControolerクラスに移動速度用にmoveSpeed変数と、それを変更するためのChangeMoveSpeed関数が追加されましたので、
ここではそのmoveSpeed変数を変更させるためのクラスを作成し、それを利用して移動速度を変更するアイテムを作成していきましょう。

 これは新しく作成するゲームオブジェクト(スピード変更用アイテム)にアタッチすることを想定しています。
矢と一緒にこのクラスがアタッチされたアイテムが降ってきますので
それに接触することでPlayerの移動速度が変更されるように作っていきます。

using UnityEngine;

/// <summary>
/// Playerの移動速度を変更するクラス
/// アイテムにアタッチして使用する
/// </summary>
public class SpeedItem : MonoBehaviour
{
    [Header("Playerの移動速度の変更値")]
    public float speed;

    void Update() {
        if (transform.position.y < -5.0f) {
            // 画面外にアイテムが出たら破壊する
            Destroy(gameObject);
        }    
    }

    private void OnTriggerEnter2D(Collider2D col) {
        // 接触したゲームオブジェクトのタグが”Player”か確認する
        if (col.gameObject.tag == "Player") {
            // ”Player”であったなら、そのPlayerゲームオブジェクトが所持しているPlayerControllerクラスの取得を試みる
            if (col.gameObject.TryGetComponent(out PlayerController playerController)) {
                // PlayerControllerクラスを取得できたなら、playerController変数に代入されたPlayerContollerクラスのChangeMoveSpeed関数を呼び出し、引数としてspeed変数を渡す
                playerController.ChangeMoveSpeed(speed);
            }

            // このアイテムを破壊する
            Destroy(gameObject);
        }
    }
}

新しいゲームオブジェクト(SpeedUp_Item)の作成

 それでは続いて、このクラスをアタッチするためのゲームオブジェクトを作成します。

Unityのヒエラルキー上で右クリックをしてメニューを表示し、[2D Object] => [Sprite]を選択して
新しいゲームオブジェクトを1つ作成しましょう。
ゲームオブジェクトの名称は「SpeedUp_Item」とします。

 Spriteのゲームオブジェクトを作成したらインスペクターを確認しましょう。
初期情報として、TransformコンポーネントとSpriteRendererコンポーネントがアタッチされています。
 Transformコンポーネントの位置情報を確認します。
Positionが{0, 0, 0}でなければ、右上の「…」アイコンをクリックし、Resetを押して位置情報をPosition {0, 0, 0}に初期化しておきます。

 SpriteRendererコンポーネントは2Dゲームオブジェクトにスプライト(絵)を描画するためのコンポーネントです。
spriteプロパティがNoneになっていますので、始めは白く表示されています。
 任意のspriteを設定して画面に表示させましょう。このとき、設定できる絵はTextureTypeがSpriteに設定されているものだけです。
もしもUnity内に絵の素材(Texture)が入っているにもかかわらず設定が出来ない場合には、素材のTexutreTypeを確認し、Sprite(2D or UI)に変更しておきましょう。


 続いて、このSpeedUp_Itemゲームオブジェクトに、新しいコンポーネントを追加していきます。
インスペクターの一番下にある「Add Component」をクリックし、まずはBoxCollider2Dコンポーネントを追加します。
IsTriggerプロパティのチェックを入れておきます。
 

 次にRigidBody2Dコンポーネントを追加します。
Constraitsプロパティをクリックし、その中のFreezeRotation.zにチェックをいれてZ軸の回転を抑止しておきます。

この2つをアタッチすることにより、このゲームオブジェクトとPlayerゲームオブジェクトとの接触判定を取れるようにします。
IsTriggerにチェックが入っているので、Collider同士は感知するものの、直接ぶつかることはなくなります。

 SpeedItemスクリプトをヒエラルキーのSpeedUp_Itemにドラッグアンドドロップしてアタッチさせましょう。

その際、Speedの値が0になっているので、アタッチの確認と一緒に、忘れずに設定をしましょう。
 PlayerのmoveSpeedの値が 0.05f ですので、この値よりも大きな値を設定すれば移動速度を上げることできますから
まずは0.1fなどを設定して調整していきましょう。

Playerゲームオブジェクトの修正

 最後に、Playerゲームオブジェクトを修正します。インスペクターの一番下にある「Add Component」をクリックし
CapsuleCollider2Dコンポーネントを追加します。
 Edit Colliderをクリックして、Playerの大きさに合わせてコライダーの大きさも適宜調整しましょう。



 ゲームを実行し、上空から降ってくるSpeedUp_ItemをPlayerを移動して接触させてみましょう。
SpeedUp_Itemが破壊されるとともに、Playerの移動速度が上昇していれば成功です。
もう一度ゲームを実行し、Sceneを確認しながら、今度はSpeedUp_Itemを取らずに見逃してみましょう。
画面外に出たときに、SpeedUp_Itemが破壊されていれば、こちらも処理は成功です。
 
 このように、アイテムが破壊される場合の処理が複数ある場合には、それらを順番に確認して問題点がないかを確認していきましょう。

 次はこのSpeedUp_Itemを矢のようにランダムに生成して降らせる処理を実装していきます。
問題なく動いていれば、SpeedUp_Itemをプレファブ化しておきます(Project内のPrefabフォルダに入れておきます。)
その後、ヒエラルキーから削除しておきましょう。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

3Dトップビューアクション(白猫風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます