【问题标题】:Change Sprite during runtime - Unity在运行时更改 Sprite - Unity
【发布时间】:2015-12-28 02:21:31
【问题描述】:

您好,我正在使用 unity 和 javascript 来编写我的纸牌游戏代码。处理完卡片后,我想将玩家卡片更改为套牌中的随机卡片。我在我的资产文件夹中创建了所有精灵。我想知道是否有办法通过名称或其他方式更改精灵来实现这一点。所有的卡片都被称为 cardDiamonds8 或 cardClubs4。我已经设置好获取名字了:

#pragma strict
public var testCard : GameObject;
private var suit;
private var value;
private var number : int;



function Start () {
    number = Random.Range(1,5);
    if (number == 1) {
        suit = "Clubs";
    } else if (number == 2) {
        suit = "Diamonds";
    } else if (number == 3) {
        suit = "Hearts";
    } else if (number == 4) {
        suit = "Spades";
    }
    number = Random.Range(1,14);
    if (number == 1) {
        value = "A";
    } else if (number == 11) {
        value = "J";
    } else if (number == 12) {
        value = "Q";
    } else if (number == 13) {
        value = "K";
    } else {
        value = number;
    }
    testCard.name = "card" + suit + value;
    print(testCard.name);
}

这只是打印出名称,但逻辑就在那里。任何更改精灵的帮助将不胜感激。

【问题讨论】:

  • 查看此answer。它可以帮助你

标签: javascript unity3d sprite


【解决方案1】:

我找到了一种方法,但为了做到这一点,您必须将所有要使用的精灵放在一个名为“资源”的文件夹中。然后只需使用

gameObject.GetComponent.<SpriteRenderer> ().sprite = Resources.Load("name", typeof(Sprite)) as Sprite;;

【讨论】:

    【解决方案2】:

    我建议的一种方法是创建一个可以容纳所有精灵的对象。要么利用检查器来引用图像,要么使用 Start() 函数通过代码将它们加载到对象中。这样做的原因是为了减少在运行时加载资产的需要。

    一旦你加载了精灵,你可以在运行时根据你的内心改变它们。

    查看此内容以通过代码加载:Resources.Load &lt;Sprite&gt;("YourImageName");

    至于通过代码更改精灵:您需要获取显示精灵的游戏对象上的组件。如果您使用的是 gui 对象,那么您需要获取关联的图像组件并更改图像组件的引用。


    更新以获得更多澄清,并改进我可能含糊的第一反应。

    建议如下,它应该在第一次执行 Update() 循环之前加载您的精灵。

    public var Sprites: Sprite[];
    
    function Start () {
         var imports : Object[] = Resources.LoadAll("path/" , Sprite);
         Sprites = new Sprite[imports.Length];
         for(var i = 0 ; i < Sprites.Length ; i++){
             Sprites[i] = imports[i];
         }
    }
    

    加载后,您将能够使用Sprites[idx] 引用您的精灵。

    这将让您通过使用您自己学习的一些代码来动态引用您的精灵:

     GetComponent(SpriteRenderer).sprite = Sprites[idx];
    

    【讨论】:

    • 对否决票的原因有何评论?很好奇,所以我下次可以做得更好。
    • 我认为您被否决了,因为人们需要大量阅读并学习一些东西。这是不好的。我投赞成票;)
    • 我认为在你给出指示时投反对票,但没有明确的指示来正确地做这件事。这就是我阅读时的感受。你可以这样做或那样做,但解释什么是这个和那个会更合适。特别是最后一段。没有冒犯的意思,但这听起来像是一个不知道但仍然试一试的人,你可能真的知道如何去做。给 dv 的不是我。
    猜你喜欢
    • 2017-01-19
    • 2019-02-22
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多