首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Unity JavaScript中声明带有自定义索引的数组?

如何在Unity JavaScript中声明带有自定义索引的数组?
EN

Stack Overflow用户
提问于 2013-08-03 01:00:15
回答 3查看 1.2K关注 0票数 1

我正在寻找一种方法来在数组中存储相同类型的变量,并通过它们的名称来访问它们。就像在PHP中一样:

代码语言:javascript
运行
复制
$array = array();
$array['first member']=$var1;
$array['another member']=$var2;
// so on

我想在Unity3D的JavaScript中做类似的事情。我有AudioClip变量,目前的用法如下:

代码语言:javascript
运行
复制
#pragma strict

var Audio_Goal:AudioClip;
var Audio_Miss:AudioClip;
var Audio_Saved:AudioClip;


function PlaySound_Goal()
{   
    audio.PlayOneShot(Audio_Goal);  
}

function PlaySound_Miss()
{   
    audio.PlayOneShot(Audio_Miss);  
}

当然,这需要每个音频剪辑一个函数,这是丑陋的。

我想这样做:

代码语言:javascript
运行
复制
function PlayAudio(audioname:String)
{
    audio.PlayOneShot(AudioArray[audioname]);
}

我该怎么做呢?

EN

回答 3

Stack Overflow用户

发布于 2013-08-03 01:30:42

你需要使用字典之类的东西:

代码语言:javascript
运行
复制
#pragma strict
import System.Collections.Generic;
var AudioArray = new Dictionary.<string,AudioClip >();

// add to dict
AudioArray["one"] = AudioClip.Create(/**/); //see AudioClip.Create(...) for arguments

// play from dict
audio.clip = AudioArray["one"];
audio.Play();
票数 4
EN

Stack Overflow用户

发布于 2013-08-03 01:46:47

你可以这样做:

代码语言:javascript
运行
复制
var myAudioClips: AudioClip[];

function Start() {
    // Your stuff...
}

function PlayAudio(audioname:String)
{
    for (var myClip in myAudioClips) {
        if (audioname.Equals(myClip.name)) {
            audio.PlayOneShot(myClip);  
        }
    }

}

然后通过使用编辑器拖动它们来添加数组中的所有剪辑。

票数 0
EN

Stack Overflow用户

发布于 2013-08-03 10:14:45

你应该能够使用Enumerable.Zip>,但是因为它在UnityScript中不可用,所以我认为这是你能做的最好的事情:

代码语言:javascript
运行
复制
var names : List.<String>;
var clips : List.<AudioClip>;

var keyFunc = function(kvp : KeyValuePair.<String, AudioClip>) kvp.Key;
var valueFunc = function(kvp : KeyValuePair.<String, AudioClip>) kvp.Value;
var dictionary = names.Select( 
    function(name, index) new KeyValuePair.<String, AudioClip>(name, clips[index]) 
).ToDictionary(keyFunc, valueFunc);

我不明白你为什么要储存Funcs。这段代码可以编译,但不会运行:

代码语言:javascript
运行
复制
var dictionary = names.Select( 
        function(name, index) new KeyValuePair.<String, AudioClip>(name, clips[index]) 
    ).ToDictionary(function(kvp) kvp.Key, function(kvp) kvp.Value);

如果您愿意,可以将其报告为bug。我不想这样做,因为我不认为开发人员需要在这种语言上浪费更多的时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18022379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档