見出し画像

キャラクター選択システムをつくってみた!【ゲーム制作記9】

はじめに

今回はキャラクター選択システムを作ってみたので、コードを紹介していきたいと思います!
動作はこのような感じになっています。

動作環境は

  • Windows11

  • Unity 2021.3.0f1

です。

よろしくお願いします!


やりたいこと

選択は、キャラクターのアイコンを貼り付けたボタンで行います。
開発中なので仮置きのアイコンが並んでいますが、画面のイメージは以下のような感じになっています。

このアイコンをクリックしたら、
①同じシーン内でキャラクターの立ち絵を表示する
②別シーンで選択したキャラクターの立ち絵、キャラクター名のテキストを表示する
ということをやりたかったのです!

ボタンの準備

UIからボタンを追加。アイコンのサイズに合わせます。
テキストは今回使わなかったので、テキストは削除しました!
スクリプトをつけたらプレハブ化して、必要な個数をすぐに用意できるようにすると作業が楽かなと思います。

①同じシーン内でキャラクターの立ち絵を表示する

アイコンをクリックすると立ち絵が切り替わるようになっています

コードはこのように書きました。

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

public class CharacterPic1 : MonoBehaviour
{
    //ボタンごとに対応するキャラクターの立ち絵をアタッチしておく
    //othercharacterにはその他の立ち絵すべてをアタッチ
    public GameObject character;
    public GameObject othercharacter; //キャラ数に合わせて追加してください
    public static int selectCharaNumber;

    void Start()
    {
        selectCharaNumber = 0;
    }

    public static int CharaNamber()
    {
        return selectCharaNumber;
    }

//キャラクター1のボタンにつける
   public void OnClick1()
    {
        selectCharaNumber = 1;
        character.SetActive(true);
        othercharacter.SetActive(false); //キャラ数に合わせて追加してください
    }

//キャラクター2のボタンにつける
    public void OnClick2()
    {
        selectCharaNumber = 2;
        character.SetActive(true);
        othercharacter.SetActive(false); //キャラ数に合わせて追加してください
    }

}

ボタンを押したら他のシーンでも使える「selectCharaNumber」に数字を代入して、アタッチしておいた立ち絵をアクティブに。
他の立ち絵が表示されている場合はそれらを消して、選択したキャラクターの立ち絵が残るようになっています。なので、キャラクターが確定するまでは自由に選びなおしができます。

スクリプトができたら、ボタンでキャラクターに対応したメソッドを呼べるようにしておきます。このとき重複がないように気を付けます!

これだと「OnClickA」を選択しているので、ナンバー1として扱っているキャラクターの立ち絵が呼び出せますね!

publicの「Character」には呼び出したいキャラクターの立ち絵を。「Othercharacter」にはその他のキャラクターの立ち絵をアタッチします。

②別シーンで選択したキャラクターの立ち絵、キャラクター名のテキストを表示する

このように立ち絵とキャラクター名を表示できます!

①のシーンで選んだキャラクターをバトルシーンで使うためにこの仕組みを作りました。
コードはこちらです。

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

public class Player : MonoBehaviour
{
    int selectCharaNumber;
    //キャラクターの立ち絵
    public GameObject Character;
  //キャラクターの名前を表示させたいテキスト 
    public TextMeshProUGUI PlayerName;

    void Start()
    {
        selectCharaNumber = CharacterPic.CharaNamber(); //キャラクター選択シーンで選んだキャラクターの番号を取得

    //キャラの名前、ゲームオブジェクト表示
        if(selectCharaNumber == 1)
        {
            PlayerName.text = string.Format("キャラクター名");
            Character.SetActive(true);
        } 
     } 
}

すごくシンプルに仕上げられたような気がして満足しています。
キャラクターの立ち絵はキャラクターごとにゲームオブジェクトを用意する必要がありますが、名前に関しては「PlayerName.text = string.Format("キャラクター名");」の「キャラクター名」の部分をスクリプト上で書き換えるだけでOKです!

テキスト表示は今回TMProを使ったのですが、Textを使う場合は
「using TMPro;」→「using UnityEngine.UI;」
「public TextMeshProUGUI PlayerName;」→「public text PlayerName;」
に書き換えてくださいね!

スクリプトを適当なゲームオブジェクトにつけた後は、インスペクターで「PlayerName」と「Caharacter」に素材をアタッチしてください!

これでキャラクター選択の仕組みができました!

最後に

最後まで見ていただき、ありがとうございました!
また次回の記事でお会いしましょう!

この記事が気に入ったらサポートをしてみませんか?