2014-09-01 7 views
0

(예, 배열, 목록 또는 사전을 사용하지 않고 변수를 동적으로 생성해야합니다.)런타임에 변수를 동적으로 생성합니다.

저는 Unity를 사용하여 비디오 게임을 개발 중입니다. 나는 대포로 발사되는 발사체를 가지고 있습니다. 처음에는 Unity의 "Object.Instantiate"메소드를 사용하여 동적으로 생성 된 프로젝트를 가지고있었습니다. 이것은 발사체가 메모리에로드되는 동안 내 게임을 덩어리로 만들 것입니다.

내 솔루션은 개체 캐시/개체 풀을 만드는 것이 었습니다. Object Cache는 Unity의 "Object.Instantiate"메소드를 사용하여 게임을 시작하기 전에 게임 객체의 "cacheAmount"를 사전에 배치합니다.

"cacheAmount"가 64보다 작 으면 성능에 이상적입니다. "cacheAmount"가 64보다 높으면 ObjectCache는 Unity의 "Object.Instantiate"메소드를 사용하는 것보다 성능이 떨어집니다.

나는 추측을 가지고 사전의 메모리 공간이 너무 커서 전체 블록에 액세스하는 데 걸리는 시간이 게임 속도를 줄이는 것이라고 생각했습니다.

사전 8 개를 8 개의 개체 (볼륨 1 - 8, 총 64 개의 개체)로 분할하기로 결정했습니다. 이 작은 볼륨을 가지면 내 성능이 다시 향상됩니다.

8 개 객체로 32 개 볼륨으로 하드 코딩되었습니다. 이로 인해 성능에 영향을 미치지 않고 256 개의 발사체가 발사 될 수있었습니다.

최적의 방법으로, 나는 사전을 전혀 사용하지 않고 간단히 변수의 "cacheAmount"를 만들고 그 전체를 반복합니다. 이 방법으로 cacheAmount를 변경하고 미리 256 번 하드 코딩하지 않고도 256 개 이상의 개별 객체를 캐시 할 수 있습니다. 어떻게 C#에서 이것에 대해 이동하거나 않습니다

int cacheAmount = 256; 
    for (int i = 0; i < cacheAmount; i++) 
    { 
     GameObject dynamicVariable>i< = (GameObject)Instantiate(projectile); 
    } 

가 그럼 난 dynamicVariable1, dynamicVariable2, dynamicVariable3, dynamicVariable4 등

에 액세스해야합니다 :

그렇게 단순 위해 A에 대한이 같은 뭔가가 필요 JavaScript/UnityScript?

(다시 한 번 메모리 공간이 너무 크고 성능에 영향을, 배열, 목록 또는 사전을 산출하여)

+0

"메모리 공간이 너무 큽니다"라는 말을 자세히 설명해 주실 수 있습니까? 그 진술은 단지 의미가 없습니다. 사전의 성능이 좋지 않으면 다른 문제가 있습니다. 사전에 문제가있는 것은 아닙니다. 아마도 당신은 잘못 구현 된'GetHashCode' 메소드를 가지고있을 것입니다. 알아보기가 어렵지만, 사전 자체는 아닙니다. –

+0

나는 Simon에 동의해야한다. 아마도 약간의 코드를 게시 할 것이다. 게시 한 단순화 된 예제는 배열을 사용하여 완전히 작동합니다. 유일한 문제는 한 번에 256 개의 GameObject를 인스턴스화하면 딸꾹질이 생길 수 있지만 배열에서 물건을 가져 오거나 저장하지 않는 것입니다. – Tom

+0

아니요, 동적으로 변수를 만들 필요가 없습니다. 배열과 사전은 괜찮습니다. – LearnCocos2D

답변

0

당신은 정말 256 개 게임 오브젝트를 인스턴스화해야합니까? 일부 게임 객체를 재사용 할 수 없습니까?

관련 문제