Unity講座|宝箱からカギをGETして扉を開ける方法【2D】

Unity
うさタブ
うさタブ

今回は【2D】で宝箱からカギをGETして扉を開ける方法について勉強するッピ!

ユウキ
ユウキ

宝箱からカギをGETして扉を開ける方法?

アイカ
アイカ

まだ習ったことないわ!

うさタブ
うさタブ

今回の勉強で、

宝箱といったオブジェクトの設定

他のスプリクトから変数を呼び出す方法

が学べるッピ!

うさタブ
うさタブ

これからこの宝箱からカギをGETして扉を開ける方法を一緒に勉強して行くッピよ~

スポンサーリンク
スポンサーリンク

宝箱からカギをGETして扉を開ける方法を学ぼう

必要なもの

うさタブ
うさタブ

まずは必要なものを用意するッピ!

  • Unity
  • Windows または Mac のパソコン

が必要ッピよ~!

うさタブ
うさタブ

まだ Unity をダウンロードしてない人は

↓ の記事を参考に必要なものをインストールするといいッピ!

うさタブ
うさタブ

その他には

  • 動けるマップ
  • 操作できるキャラクター
  • 扉の画像
  • 宝箱の画像(開)
  • 宝箱の画像(閉)

も必要ッピよ~!

うさタブ
うさタブ

準備できたッピか?

それじゃあさっそくやっていくッピ♪

扉と画像を用意する

うさタブ
うさタブ

さっそく扉と画像をUnityに登録するッピ!

うさタブ
うさタブ

アセットに気に入った画像

ドラッグ&ドロップするッピよ~

ユウキ
ユウキ

オッケー

うさタブ
うさタブ

登録した画像のサイズを設定するッピ!

うさタブ
うさタブ

インスペクター→スプライトモード→

に設定するッピよ~

うさタブ
うさタブ

宝箱の画像も忘れちゃダメッピ!

アイカ
アイカ

できたわ!

画像をヒエラルキーへ登録

うさタブ
うさタブ

次は

するッピ!

うさタブ
うさタブ

宝箱(閉)画像ヒエラルキーへドラッグ&ドロップ

好きな場所に画像を変更ドアのレイヤー順序を整えるッピ

うさタブ
うさタブ

するッピよ~

アイカ
アイカ

できたわ!

質量と当たり判定

当たり判定の追加

うさタブ
うさタブ

キャラと宝箱がぶつかって

イベントを起こすには

質量当たり判定

が必要っピ!

うさタブ
うさタブ

まずヒエラルキーのドアを選択して、

インスペクター→コンポーネントを追加→Physics2D→BoxCollider2D

を選択するッピ~

うさタブ
うさタブ

当たり判定を調整するときは

インスペクター→CapsuleCollider2D→コライダー編集

からできるッピよ~

質量の追加

うさタブ
うさタブ

次は質量を追加するッピよ~

インスペクター→コンポーネントを追加Physics 2DRigidbody 2D

を選択するッピ~

うさタブ
うさタブ

インスペクターから

Rigidbody 2D→ボディタイプ→静的

を選択するッピ!

ユウキ
ユウキ

この「静的」とか「ドラマティック」とかって何なんだ?

うさタブ
うさタブ

これは、
外部からの「ちから」が働くかどうか?

を決める項目ッピ!

状態重力質量速度
Dramatic
(ドラマティック)
外部から力を受ける
モノを動かす
Cinematic
(キネマティック)
外部から力を受けない
モノを動かす
Static
(静的)
外部から力を受けない
モノを動かせない
ユウキ
ユウキ

へー

こうなってるのか

アイカ
アイカ

勉強になったわ!

うさタブ
うさタブ

宝箱にも同じように

当たり判定と質量

を追加するッピ!

プレイヤーの設定

プレイヤーのタグづけ

うさタブ
うさタブ

次はプレイヤーのタグづけをするッピ!

アイカ
アイカ

タグ付け?

うさタブ
うさタブ

タグづけは、

●●XXに当たったら、
というプログラムを起動する

というプログラムを組みたいときに●●やXXを判別するものッピ!

うさタブ
うさタブ

今回のタグ付けは

プレイヤーNPCに当たったら、
会話というプログラムを起動する

というプログラムを組むためにタグづけしていくッピよ~!

ユウキ
ユウキ

そんな機能があるんだなー

うさタブ
うさタブ

まず

プレイヤーをクリック

するッピ~

プレイヤーの当たり判定/質量の追加

うさタブ
うさタブ

プレイヤーの当たり判定をつけるッピ!

すでに当たり判定がついている場合は次のステップに行くッピよ~

うさタブ
うさタブ

まず

プレイヤーをクリック

するッピ~

うさタブ
うさタブ

それからインスペクター

コンポーネントを追加Physics2DCircle Collider2D

を選択するッピ~

うさタブ
うさタブ

質量を追加するッピ!
インスペクターから

コンポーネントを追加Physics2DRigidbody 2D

を選択するッピ~

うさタブ
うさタブ

重力や抵抗を設定するッピよ~!
インスペクターから

Rigidbody 2D

を選択するッピ~

うさタブ
うさタブ

そこから

リニアの抵抗0
回転抵抗 0
重力スケール 0

と入力し、

回転を固定  ☑Z にチェックを入れる

ッピよ~

アイカ
アイカ

できたわ!

宝箱のプログラムを組む

うさタブ
うさタブ

これから宝箱のプログラムを組むッピ!

うさタブ
うさタブ

宝箱を選んだまま

インスペクター→コンポーネントを追加New script【treasureと名前をつけるッピ!

そのままC#スクリプトをクリックしてスクリプトを編集するッピよ~

うさタブ
うさタブ

↓の文をコピーして

using UnityEngine;

public class treasure : MonoBehaviour
{
    public static treasure instance;
    public bool getkey;

    [SerializeField]
    private SpriteRenderer beforeRenderer;

    [SerializeField]
    private Sprite afterSprite;

    private void Awake()
    {
        instance = this;
    }

    private void OnCollisionEnter2D(Collision2D other)
    {

        if (other.gameObject.CompareTag("Player"))
        {
            if (getkey == false)
            {
                beforeRenderer.sprite = afterSprite;
                getkey = true;
            }
        }
    }

}

と入力するッピ!

うさタブ
うさタブ

ちなみにこれは

という意味になるッピ!

ユウキ
ユウキ

こういう意味だったのか!

アイカ
アイカ

勉強になるわ

宝箱のコード
//宝箱
using UnityEngine;

public class treasure : MonoBehaviour
{
    public static treasure instance;// 外部呼び出し許可設定
    public bool getkey;

    [SerializeField]
    private SpriteRenderer beforeRenderer;// 変更前の画像

    [SerializeField]
    private Sprite afterSprite;// 変更後の画像

    private void Awake()
    {
        instance = this;// このオブジェクトに外部呼び出し許可を設定
    }

    private void OnCollisionEnter2D(Collision2D other)
    {

        if (other.gameObject.CompareTag("Player"))
        {
            if (getkey == false)// 鍵をまだ持ってなかったら
            {
                beforeRenderer.sprite = afterSprite;// 画像変更
                getkey = true;// 鍵の取得
            }
        }
    }
}

宝箱を開けたあとの画像を設定

うさタブ
うさタブ

宝箱の開けたあとの画像を設定するッピ!

うさタブ
うさタブ

まず

インスペクター→treasure(スクリプト)

を選ぶッピ!

BeforeRenderer にはヒエラルキーの宝箱

AfterSprite にはアセット開けたあとの宝箱の画像

をドラッグ&ドロップするッピ~

ユウキ
ユウキ

オッケーできたぜ!

アイカ
アイカ

いい感じね!

扉のプログラムを設定

うさタブ
うさタブ

ここからは扉のプログラムを組むッピ!

うさタブ
うさタブ

宝箱を選んだまま

インスペクター→コンポーネントを追加New script【openDoorと名前をつけるッピ!

そのままC#スクリプトをクリックしてスクリプトを編集するッピよ~

うさタブ
うさタブ

↓の文をコピーして

using UnityEngine;

public class openDoor : MonoBehaviour
{
    private void OnCollisionEnter2D(Collision2D other)
    {

        if (other.gameObject.CompareTag("Player"))
        {
            if (treasure.instance.getkey == true)
            {
                gameObject.SetActive(false);
            }
        }
    }
}

と入力するッピ!

うさタブ
うさタブ

ちなみにこれは

という意味になるッピ!

ユウキ
ユウキ

こういう意味だったのか!

アイカ
アイカ

勉強になるわ

扉のコード
//ドア
using UnityEngine;

public class openDoor : MonoBehaviour
{
    private void OnCollisionEnter2D(Collision2D other)// オブジェクトが質量のあるものに触れたら
    {

        if (other.gameObject.CompareTag("Player"))// 中でもプレイヤーに触れたら
        {
            if (treasure.instance.getkey == true)// 鍵を持っていたら
            {
                gameObject.SetActive(false);// 扉を削除
            }
        }
    }
}

テストプレイ

ユウキ
ユウキ

おお!
宝箱が空いて扉が消えたぞ!

アイカ
アイカ

やったね♪

他のスプリクトから変数を呼び出す スタティック化とは?

うさタブ
うさタブ

今回スプリクトをスタティック化して

他のスプリクトでも使えるようにした

のがミソッピ!

アイカ
アイカ

スタティック化?

うさタブ
うさタブ

本来、

スプリクトのファイルとファイル同士
バラバラでリンクしてないゆえ、
他のスプリクトの変数って読み込めない

んだッピ!

ユウキ
ユウキ

そうなのか!?

うさタブ
うさタブ

だから、今回は

public static treasure instance;// 外部呼び出し許可設定
private void Awake()
{
  instance = this;// このオブジェクトに外部呼び出し許可を設定
 }

で他のファイルでも使えるようインスタンス(実体化)して、
共同ファイル(スタティック化)にしたんだッピ!

アイカ
アイカ

????

ユウキ
ユウキ

なに言ってるかわかんねーよ

うさタブ

ユウキ
ユウキ

インスタンス化とかスタティック化とか
いきなり言われても・・・

うさタブ
うさタブ

カンタンに言うと

スプリクトのコードは料理のレシピ

んだッピ!

うさタブ
うさタブ

カンタンに言うと

レシピを使って実体のある料理をつくることを
インスタンス化

というんだッピ!

うさタブ
うさタブ

今回でいうと、自家製のホワイトソースを作って

作った料理をグラタンやシチュー
他の料理に使えるようにすることを
スタティック化

というんだッピ!

うさタブ
うさタブ

作ったスタティックの変数は、今回なら

といった感じで他スプリクトから呼び出すっピ!

アイカ
アイカ

わかったわ!

ユウキ
ユウキ

オレは料理しねーから

たとえがサッパリだぜ

その他の呼び出し方法

うさタブ
うさタブ

今回は宝箱のコードごとスタティック化したッピが、

スプリクトA(呼び出されるスプリクト)

using UnityEngine;
public class testA : MonoBehaviour
{
   public static string testLog = "こんにちは";//文字のスタティック化
}

スプリクトB(呼び出すスプリクト)

using UnityEngine;
public class testB : MonoBehaviour
{
    string testB = testA.testLog;//スタティック化した文字の呼び出し
    void Start()
    {
        Debug.Log("testLog");
    }
}

みたいに変数だけでもできるッピよ~

うさタブ
うさタブ

この場合は、

といった感じで他スプリクトから呼び出すっピ!

学習のまとめ

扉のコード

//宝箱
using UnityEngine;

public class treasure : MonoBehaviour
{
    public static treasure instance;// 外部呼び出し許可設定
    public bool getkey;

    [SerializeField]
    private SpriteRenderer beforeRenderer;// 変更前の画像

    [SerializeField]
    private Sprite afterSprite;// 変更後の画像

    private void Awake()
    {
        instance = this;// このオブジェクトに外部呼び出し許可を設定
    }

    private void OnCollisionEnter2D(Collision2D other)
    {

        if (other.gameObject.CompareTag("Player"))
        {
            if (getkey == false)// 鍵をまだ持ってなかったら
            {
                beforeRenderer.sprite = afterSprite;// 画像変更
                getkey = true;// 鍵の取得
            }
        }
    }
}

宝箱のコード

//ドア
using UnityEngine;

public class openDoor : MonoBehaviour
{
    private void OnCollisionEnter2D(Collision2D other)// オブジェクトが質量のあるものに触れたら
    {

        if (other.gameObject.CompareTag("Player"))// 中でもプレイヤーに触れたら
        {
            if (treasure.instance.getkey == true)// 鍵を持っていたら
            {
                gameObject.SetActive(false);// 扉を削除
            }
        }
    }
}
学習のまとめ
  • 必要な画像を用意する
  • 扉に当たり判定と質量を追加
  • 宝箱に当たり判定と質量を追加
  • プレイヤータグを追加
  • スプリクトの作成
  • スタティック化で他のスプリクトで読み込めるようにする
  • 宝箱に画像変更のギミックを追加

うさタブ
うさタブ

上手くできたッピか?

これからも色んなゲーム作りやプログラムの解説をしていくッピ!

次回も楽しみにしているッピよ~~!

うさタブ
うさタブ

UnityはC#を元に作られているッピ!
まだまだ Unity や C#について勉強したい人は↓の記事を参考にするッピ♪

スポンサーリンク

どうしてもわからない、そんなときは?

ユウキ
ユウキ

うさタブ!

オレ、もっと本格的にゲームが作りたいんだ

アイカ
アイカ

私もだわ!

もっとたくさん実用的なコードを

学ぶことってできないかしら?

うさタブ
うさタブ

おお、2人ともやる気ッピね!

ゲームの作り方を学ぶなら、コレとかどうッピか?


うさタブ
うさタブ
Udemy」テレビでも有名な動画教材
人気の機械学習からUnityゲーム講座まで選び放題ッピ!

うさタブ
うさタブ

2DアクションRPG脱出ゲーム

3Dゲーム制作講座まで

買い切り講座だからいつでも勉強し放題ッピよ~!

ユウキ
ユウキ

お!いいじゃん!

アイカ
アイカ

あと、どこか素敵な素材を売っているところはないかしら? 公式の素材販売だと、クレカ支払いしかなくて・・・

ユウキ
ユウキ

小学生じゃクレカで支払えないぜ~

うさタブ
うさタブ

ゲームの素材を買いたいなら、

DLsiteBoothとかどうッピか?

うさタブ
うさタブ

素敵なドット絵や音楽素材がいっぱい売ってるッピ!

うさタブ
うさタブ

しかもUnityアセットストアと違って

クレカ支払いじゃなく、コンビニ支払いができるのもポイントッピ!

ユウキ
ユウキ

すげーカッコいい素材がいっぱいある!

アイカ
アイカ

わたしもさっそくチェックしてみようかな♪

スポンサーリンク
Unity動画付き
学んで遊んでジャンケンポン!
タイトルとURLをコピーしました