2013-06-10 3 views
0

동일한 유형의 객체 인스턴스가 2 개 있습니다. (정확하게 이것은 Unity3D의 AudioSource입니다.) 초기화, 파기 등과 같은 작업을 양쪽에 적용해야하므로 배열에 저장하는 것이 좋은 아이디어가 될 수 있으므로 반복 할 수 있습니다. 내가 배열에 foreach 수 번만 코드 및 기타 일반적인 작업을 초기화 쓰기이와배열에 저장된 객체 인스턴스의 대체 이름, C#

AudioSource[] audioSources = new AudioSource[2]; 

.

그러나이 두 인스턴스는 다른 용도로 사용됩니다. 예를 들어 첫 번째는 BGM 용 AudioSource이고 두 번째는 SFX 용입니다. 이렇게하면 코드가 더 읽기 쉽고 배열을 사용하여 두 인스턴스를 반복 할 수 있습니다.

따라서 bgmSourcesfxSource과 같은 각 인스턴스의 대체 이름을 지정해야한다고 생각합니다. 이게 올바른 접근법인가요?

AudioSource bgmSource = audioSources[0]; 
AudioSource sfxSource = audioSources[1]; 
+0

아무 문제가 없습니다. 그래도 더 많은 것을 가지지 않으려는 경우 배열을 없애고'Initialize (AudioSource src) '와 같은 서브 루틴을 만들거나 호출 할 수 있습니다. 적어도 두 개의 함수 호출을 배열의 foreach처럼 깨끗하게 처리하는 것이 좋을 것입니다. 그리고 각 객체에 대한 다중 참조를 갖는 복잡성을 제거합니다. – Blorgbeard

답변

1

또 다른 해결책은 작은 배열 에 적합하지 않은 사전을 사용하고 있지만 두 번째 변수를 사용하여 배열에있는 참조 번호 을 저장하지 않고 개체간에 구분할 수 있습니다. BTW

// Enum declaration 
enum AudioSourceNames 
{ 
    BGM_SOURCE, 
    SFX_SOURCE 
} 


// Called before first update 
public void Start() 
{ 
    // Dictionary declaration 
    Dictionary< int, AudioSource > audioSources; 

    audioSources = new Dictionary< int, AudioSource > 
    { 
     (int)BGM_SOURCE, new AudioSource(), 
     (int)SFX_SOURCE, new AudioSource() 
    }; 


    // Accessing the dictionary 
    audioSources[ (int)AudioSourceNames.BGM_SOURCE ].Play(); 
} 

:

Dictionary< string, AudioSource > audioSources; 

    audioSources = new Dictionary<string, AudioSource> 
    { 
     "BGM_SOURCE", new AudioSource(), 
     "SFX_SOURCE", new AudioSource() 
    }; 

그런 다음 당신은 또한 사전 키를 추적하는 대신 문자열/상수 값을 사용하는 열거를 사용할 수 있습니다 : 당신과 함께 enumarator 기술을 사용할 수 있습니다 예를 들어

배열에서 배열의 각 AudioSource 인덱스를 기억할 필요가 없습니다.

1

제 관점에서 볼 때 솔루션이 좋을 것 같습니다.

초기화 코드와 이러한 것들에 대한

코드는를 AudioSource에 희망 만하면 다른 일반 작업, 안 그래?

1

글쎄, 그건 합법적 인거야. 그것은 단지 기호/디자인의 문제입니다. 나는 당신을 일종의 사전에 넣을 수 있다고 말하고 싶습니다. 따라서 정확하게 key을 통해 레이블을 지정할 수 있습니다. 그렇게하면 은 이 bgmSource이고 [1]sfxSource을 기억할 필요가 없습니다.

관련 문제