繁体   English   中英

unity 5如何在Character Creation菜单上显示班级的统计数据?

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

在Unity 5中制作游戏,我有主菜单和CharacterCreation菜单。 但是在CharacterCreation-Menu中,我希望它在菜单中单击该类后显示“Warrior”统计数据和“Mage”统计数据。 我怎么能这样做?

我意识到我可以使用UI文本添加更多菜单,每个类统计信息都放在屏幕上,但这不会那么有趣,我也可以为CharacterCreationg_Menu上的每个玩家添加一个新画布,但这会使一切都如此很难看到,非常凌乱。

我有一种预感,我应该在“公共无效战士”和“公共虚空法师”中添加必要的信息但我无法弄明白。

一旦我按下CharacterCreation_Script中的一个类: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元素(视图),显示任何字符类(模型)的统计/能力/描述。

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中,您不会隐藏和显示每个类的特定画布,但您只需创建不同类型的字符并将它们传递给您的视图:

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类中声明的元素匹配的子Text。
  • 将CharacterDetailsView脚本添加到新的GameObject,并将子Text元素分配给各自的字段。
  • 最后,将GameObject分配给CharacterCreationScript中的characterDetailsView字段。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM