unity 5 如何在角色创建菜单上显示 class 的统计信息?

unity 5 how can I display stats of an class on a Character Creation menu?

在 Unity 5 中制作游戏,我有主菜单和角色创建菜单。但是,在 CharacterCreation-Menu 中,我希望它在我单击菜单中的 class 后显示 "Warrior" 统计信息和 "Mage" 统计信息。我该怎么做?

我意识到我可以添加更多菜单,每个 class 统计数据都用 UI 文本放在屏幕上,但这不是很有趣,而且我可以添加一个新的canvas CharacterCreationg_Menu 上的每个玩家,但这会使一切都很难看清并且非常混乱。

我有一种预感,我应该在"public void Warrior"和"public void Mage"中添加必要的信息,但我想不通。

一旦我在 CharacterCreation_Script 中按下 class: CharacterCreation-Menu_Script:

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

public class CharacterCreationScript : MonoBehaviour {

    // Class Info
    public Canvas classInfo;

    // Class Buttons
    public Button warrior;
    public Button mage;

    // Buttons
    public Button createCharacter;
    public Button goBack;

    // Use this for initialization
    void Start ()
    {
        classInfo = classInfo.GetComponent<Canvas>();
        classInfo.enabled = false;

        // Classes
        warrior = warrior.GetComponent<Button>();
        mage = mage.GetComponent<Button>();

        // Buttons
        createCharacter = createCharacter.GetComponent<Button>();
        goBack = goBack.GetComponent<Button>();
    }
    // Classes
    // Warrior
    public void Warrior()
    {
        classInfo.enabled = true;
    }
    // Mage
    public void Mage()
    {
        classInfo.enabled = true;
    }
    // Create Character Button
    public void CreateCharacter()
    {
        Application.LoadLevel("NewGame");
    }
    // Go Back Button
    public void GoBack()
    {
        Application.LoadLevel("MainMenu");
    }

    // Update is called once per frame
    void Update ()
    {

    }
}

我在屏幕上弹出一条文字 "Class Info" 但它不包含存储在Player_Classes:

中的信息

战士

using UnityEngine;
using System.Collections;

public class BaseWarriorClass : BaseCharacterClass
{

    public BaseWarriorClass()
    {
        // Basic
        CharacterClassName = "Warrior";
        CharacterClassDescription = "Uses melee to crush enemies.";
        //Gold = 100;

        // Stats
        Health = 100;
        Mana = 100;
        Stamina = 10;
        Strength = 20;
        Intelligence = 5;
        Armour = 0;
        Resistance = 0;
    }
}

法师

using UnityEngine;
using System.Collections;

public class BaseMageClass : BaseCharacterClass
{

    public BaseMageClass()
    {
        // Basic
        CharacterClassName = "Mage";
        CharacterClassDescription = "Uses spells to vaporize enemies.";
        //Gold = 100;

        // Stats
        Health = 100;
        Mana = 100;
        Stamina = 10;
        Strength = 5;
        Intelligence = 20;
        Armour = 0;
        Resistance = 0;
    }
}

您可能只有一个通用 UI 元素(视图),它显示任何字符 class(模型)的 stats/abilities/description。

public class CharacterDetailsView : MonoBehaviour
{
    public Text healthText;
    public Text manaText;
    // ...

    public void SetModel(BaseCharacterClass chr)
    {
        healthText.text = chr.Health.ToString();
        manaText.text = chr.Mana.ToString();
        // ...
    }
}

在您的 CharacterCreationScript 中,您不会为每个 class 隐藏和显示特定的画布,但您只需创建不同类型的角色并将它们传递到您的视图:

public class CharacterCreationScript : MonoBehaviour
{
    public CharacterDetailsView characterDetailsView;
    private BaseCharacterClass createdCharacter;

    // ...

    void WarriorClicked()
    {
        createdCharacter = new BaseWarriorClass();
        UpdateCharacterDetailsView();
    }

    void MageClicked()
    {
        createdCharacter = new BaseMageClass();
        UpdateCharacterDetailsView();
    }

    void UpdateCharacterDetailsView()
    {
        characterDetailsView.SetModel(createdCharacter);
    }
}

您还必须确保您的场景设置正确:

  • 在您的场景中有一个 GameObject 代表角色详细信息视图区域,并为其提供与 CharacterDetailsView class.
  • 中声明的那些相匹配的子 Text ui 元素
  • 将 CharacterDetailsView 脚本添加到您的新游戏对象并将子文本元素分配给它们各自的字段。
  • 最后,您将 GameObject 分配给 CharacterCreationScript 中的 characterDetailsView 字段。

尽管仍有很大的改进空间,但这比单独的 UI 元素更容易维护。 您可能想阅读模型-视图-控制设计模式,这对任何基于 UI 的游戏都应该非常有帮助。