在运行时更改Sprite - Unity

时间:2015-12-28 02:21:32

标签: javascript unity3d sprite

您好我正在使用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);
}

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

2 个答案:

答案 0 :(得分:0)

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

一旦你加载了精灵,你就可以在运行时将它们改变为心灵内容。

通过代码Resources.Load <Sprite>("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];

答案 1 :(得分:0)

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

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