Unity3D C# - 在struct / class中存储sprite?

时间:2017-01-25 12:42:40

标签: c# dictionary unity3d struct sprite

我正在创建一个多人游戏,包括具有不同值(例如健康,伤害)的不同英雄。我最初从数据库中获取这些值并将它们存储到 struct

            {% if user.is_authenticated %}
            <li class="dropdown">
                <a data-toggle="dropdown" class="dropdown-toggle" href="accueil">
                    <span class="glyphicon glyphicon-baby-formula"></span> Actes <b class="caret"></b>
                </a>
                <ul class="dropdown-menu">
                    <li class="dropdown-submenu">
                        <a tabindex="-1" href="#">Fiches individuelles</a>
                            <ul class="dropdown-menu">
                                <li><a tabindex="-1" href="{% url "home" %}">Accueil des fiches individuelles</a></li>
                            </ul>
                    </li>
            </li>

在结构中存储值并创建字典(int,my-struct)以获得之前完全正常的值。

我已经到了想要为此结构中的每个英雄 存储特定精灵的地步。 我考虑通过Resources.Load获取这些精灵(我猜这是最简单的方法)

-> I have little to no knowledge about structs 
-> and got told this is probably a performance loss / bad approach

这是我提供结构并在字典中添加条目的方式。

public struct data
{
    public string Name;
    public int ID, hp, dmg, range, magazin;
    public float tbtwb, rltime;
    public Sprite heroSprite;   //Structs don't seem to like Unity's sprite type
}

public Dictionary<int, data>_HeroDict;

我的问题:我无法在结构中存储精灵,也不知道变通方法。

我被告知我可以/应该使用类而不是结构,但我也不能存储Sprite,不知道为什么。

你能指出我正确的方向并给我一个示例方法吗?

提前致谢,Csharpest

1 个答案:

答案 0 :(得分:1)

你不能在结构或类中存储精灵。精灵是Unity内部的一个类。您可以存储的内容是精灵的引用,这正是您声明时所发生的事情

{{1}}

了解如何存储精灵也很重要。精灵是一种资产。在构建游戏时,Unity会将资产序列化为包。当你导入一个精灵时,Unity会做一些魔术,然后就像你导入它时一样把它还给你。这就是为什么你不能在你的代码/自定义文件中存储sprite的原因。即使你确实找到了某种方法,但这样做是非常不合适的,因为Unity执行了许多你不知道的优化。

有了这些知识,您可以从Unity的资产数据库中检索精灵(或任何资产):

  1. 在您的一个monobehaviour类中声明一个公共变量,并在编辑器中分配引用。
  2. 将您的资源存储在Resources文件夹中,并使用Resources.Load按名称查找并加载它。
  3. 在你的情况下,你最好的选择是给每个英雄一些ID,并用它作为名称从资源中加载它。

    我还应该提到另外两件事:一,除非你绝对知道你在做什么,否则总是使用班级。你提出问题的方式表明你不这样做,所以改用一个班级。更多阅读:Design guidelines from MSDN

    二,您的代码看起来像是来自C ++背景,并且您试图以某种方式使用您现有的知识和在Unity内部做事的旧方法。别。你应该真正做的是为每个英雄创建一个预制件并从资源中加载它们。