0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Unityでキャラクター選択システムを作ってみた

Posted at

はじめに

今回は、格ゲーなどで使うキャラクター選択システムを作ってみたので紹介します。

構造

キャラクター選択シーン

  • キャラクターのアイコンを貼り付けたボタンを配置
  • ボタンをクリックしたら、static int型の変数に数字を入れて保存
  • 同じシーン内で対応したキャラクターの立ち絵を表示する

バトルシーン

  • 選択されたキャラクターの立ち絵、キャラクター名を表示する

としました。

キャラクターの立ち絵を表示する

スクリプトは以下のように書きました。

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

public class CharacterPic : MonoBehaviour
{
    //ボタンごとに対応するキャラクターの立ち絵をアサインしてください
    public GameObject _character1;
    public GameObject _character2;
    public static int _selectCharaNumber;

    void Start()
    {
        _selectCharaNumber = 0; //最初は何も表示したくないので、割り当てをしていない番号を代入します
    }

    public static int CharaNamber()
    {
        return _selectCharaNumber;
    }

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

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

}

かなり力技。キャラクター数が増えたときに大変なので、例えば画像を差し替えるようにするとか、プレハブを生成するとか…改良の余地ありですね。

スクリプトができたら、適当なゲームオブジェクトを作ってアタッチしてください。Inspectorにキャラクターの立ち絵をアサインしておくのも忘れず行いましょう。
それができたら、ボタンでキャラクターに対応したメソッドを呼べるようにしておきます。

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

①のシーンで選んだキャラクターをバトルシーンで使うための機能になります。
スクリプトはこちらです。

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

public class Player : MonoBehaviour
{
    int _charaNumber;
    
    public Text _nameArea; //キャラクターの名前を表示させたいテキスト

    //キャラクターの名前
    public string _charaName1; 
    public string _charaName2;

    //キャラクターの立ち絵
    public GameObject _character1; 
    public GameObject _character2; 

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

    //キャラの名前、ゲームオブジェクト表示
    public void CharaSpawn()
     {
        if(_charaNumber == 1)
        {
            _nameArea.text = string.Format(_charaName1);
            _character1.SetActive(true);
        } 

        if(_charaNumber == 2)
        {
            _nameArea.text = string.Format(_charaName2);
            _character2.SetActive(true);
        } 
     }
}

こちらのスクリプトも適当なゲームオブジェクトを用意しアタッチして、キャラクター名や立ち絵素材をアサインしてください。

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

最後に

いかがでしたでしょうか。
1つのゲームオブジェクトで管理できるようにしたとはいえ、キャラクター数が増えるととんでもないことになりそうなので、もう少しいいコードにできないか考えてみようと思います。

最後まで読んでいただき、ありがとうございました!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?