2014-01-07 3 views
0

내 애셋 번들을 내 프로젝트에로드하고 모든 애트리뷰트를 목록에 추가하여 애셋 번들 내의 개별 객체를 반복 할 수있게했습니다. 그러나로드 된 객체를 내 장면에서 더 이상 필요하지 않게되면 삭제하는 데 문제가 있습니다.유니티 애셋 번들에서로드 된 애셋 훼손

내 연구에서는 Bundle.UnloadAll을 알고 있지만 내가 읽은 것에서는 내가 원하지 않는 전체 번들을 파괴합니다. 지금 내 코드는 다음과 같습니다 (가) 자산 번들 객체에로드하고 목록에서 다음 중 하나를 생성해야 포함한 내 목록을

if(GUI.Button(new Rect(10,130,100,50), "Forward")) 
{ 
    if(index > 0 && object_List[index] != null) 
    { 
     Destroy((GameObject)object_List[index]); 
    } 

    Instantiate((GameObject)object_List[index]); 
    index ++; 
} 

이 코드 반복합니다. 동시에 이전에로드 한 것을 파괴해야합니다. 이 코드를 실행하면, 나는 다음과 같은 오류 얻을 :

Destroying assets is not permitted to avoid data loss. If you really want to remove an asset use DestroyImmediate (theObject, true);

그래서 나는 그것의 제안에 코드를 변경하고이 오류로 실행 :

그러나

MissingReferenceException: The object of type 'GameObject' has been destroyed but you are still trying to access it. Your script should either check if it is null or you should not destroy the object.

, 아무것도 내 목록에서 제거됩니다 스폰 된 첫 번째 객체가 여전히 남아 있습니다.

누구도 비슷한 문제에 부딪 혔습니까? 내가 할 수있는 일이 가능한거야?

도움을 주시면 감사하겠습니다.

답변

0

실수는 게임 오브젝트가 아니라 자산을 파괴하려고한다는 것입니다.

GameObject myObject = Instantiate((GameObject)object_List[index]);

는 당신에게 객체를 제공합니다 나중에 당신은 그것을 파괴하는 Destroy(myObject);를 호출 할 수 있습니다 : 당신이 Instantiate((GameObject)object_List[index]);를 호출 할 때 그것은 예를 들어, 그래서로드 된 객체에 대한 참조를 반환합니다.

게임을 파괴하는 대신, 필요할 때 게임 개체를 사용 중지/사용 설정하려고 할 수 있습니다.하지만 게임 개체를 파괴하는 이유가 명확하지 않아서 목적을 달성하지 못할 수도 있습니다.

if(GUI.Button(new Rect(10,130,100,50), "Forward")) 
{ 
    if(index > 0 && object_List[index] != null) 
    { 
     ((GameObject)object_List[index]).SetActive(false); 
    } 

    ((GameObject)object_List[index]).SetActive(true); 
    index ++; 
}