对于Array中的每个字符串

时间:2011-06-24 09:31:18

标签: arrays string unity3d unityscript

正如名称所说的那样,我希望对于数组中的每个特定名称,将一个值添加到int中。

例如:如果数组中有3个同名的字符串,那么将向该值添加3次50。

这是我现在的剧本:

var lootList = new Array();
var interaction : Texture;
var interact = false;
var position : Rect;
var ching : AudioClip;
var lootPrice = 0;

function Update()
{
    print(lootList);

    if ("chalice" in lootList){
        lootPrice += 50;
    }
}

function Start()
{
    position = Rect( ( Screen.width - interaction.width ) /2, ( Screen.height - interaction.height ) /2, interaction.width, interaction.height );
}

function OnTriggerStay(col : Collider)
{   
    if(col.gameObject.tag == "loot")
    {
        interact = true;

        if(Input.GetKeyDown("e"))
        {
            if(col.gameObject.name == "chalice")
            {
                Destroy(col.gameObject);
                print("chaliceObtained");
                audio.clip = ching;
                audio.pitch = Random.Range(0.8,1.2);
                audio.Play();
                interact = false;
                lootList.Add("chalice");
            }

            if(col.gameObject.name == "moneyPouch")
            {
                Destroy(col.gameObject);
                print("moneyPouchObtained");
                audio.clip = ching;
                audio.pitch = Random.Range(0.8,1.2);
                audio.Play();
                interact = false;
                lootList.Add("moneyPouch");
            }

            if(col.gameObject.name == "ring")
            {
                Destroy(col.gameObject);
                print("ringObtained");
                audio.clip = ching;
                audio.pitch = Random.Range(0.8,1.2);
                audio.Play();
                interact = false;
                lootList.Add("ring");
            }

            if(col.gameObject.name == "goldCoins")
            {
                Destroy(col.gameObject);
                print("coldCoinsObtained");
                audio.clip = ching;
                audio.pitch = Random.Range(0.8,1.2);
                audio.Play();
                interact = false;
                lootList.Add("goldCoins");
            }

            if(col.gameObject.name == "plate")
            {
                Destroy(col.gameObject);
                print("plateObtained");
                audio.clip = ching;
                audio.pitch = Random.Range(0.8,1.2);
                audio.Play();
                interact = false;
                lootList.Add("plate");
            }
        }
    }
}

function OnTriggerExit(col : Collider)
{   
    if(col.gameObject.tag == "pouch")
    {
        interact = false;
    }
}

function OnGUI()
{
    if(interact == true)
    {
        GUI.DrawTexture(position, interaction);
        GUI.color.a = 1;
    }
}

这是我正在制作的游戏,你可以偷取物品以获得额外的分数。

我尝试使用for(i = 0; i < variable.Length; i++),但似乎没有用。

我现在唯一能想到的就是使用布尔值来添加一次。但那不是内存友好的。

提前感谢帮助,并提前致谢!

1 个答案:

答案 0 :(得分:1)

您可以使用标准.forEach(callback)方法:

lootList.forEach(function(value, index, array)
{
    if (value === "chalice") { lootPrice += 50; }
});

如果您没有这种方法,可以像这样实现:

if (!Array.prototype.forEach) {
    Array.prototype.forEach = function (callback) {
        for(var i = 0; i < this.length; i++) { callback(this[i], i, this); }
    }
}