Unity Resource.Load
function에는 두 개의 오버로드 된 메소드가 있습니다. 하나는 asset 경로이고 다른 하나는 SystemTypeInstance 유형을 묻습니다. 왜 하나의 방법을 사용해야하는지에 대한 정보가 없습니다. 하지만 하나의 매개 변수로 Resources.Load를 시도했을 때 null을 반환했으며 두 번째 매개 변수를 추가하면 모든 것이 정상이었습니다. 예를 들어 Sprite asd = Resources.Load("test") as Sprite;
은 null을 반환하지만 Sprite asd = Resources.Load("test", typeof(Sprite)) as Sprite;
은 "Assets/Resources/test"
에 스프라이트를 반환합니다. 두 번째 매개 변수를 추가해야하는 이유는 무엇입니까? 왜 필요한가?systemTypeInstance없이 Resources.Load가 작동하지 않는 이유
답변
두 번째 매개 변수를 추가해야하는 이유는 무엇입니까? 필요한 이유는 무엇입니까?
.
public static Object Load(string path);
2 : 하지 일을하고 null을 반환 Sprite asd = Resources.Load("test") as Sprite;
아래의 오버로드를 사용합니다.
public static Object Load(string path, Type systemTypeInstance);
제네릭을 사용하는 다른 오버로드가 있습니다 예상대로 작동 Sprite asd = Resources.Load("test", typeof(Sprite)) as Sprite;
아래의 오버로드를 사용하고 있습니다.
는 제네릭하지만이 질문이 두 가지 문제를 사용하는 다른 오버로드가 있습니다.
당신이 당신의 이미지를 가져 스프라이트 (2D 및 UI)에 텍스처 유형을 설정
, 그것은Sprite
의 유형이된다. 문제는
# 1의 첫 번째 오버로드가 Unity 유형
Object
을
Sprite
이 아닌 것으로 사용하고 있다는 것입니다. Unity
Object
을 반환합니다. 그것은 다음과 같습니다 당신이
as Sprite
와
Sprite
에 유니티
Object
에서 캐스팅을 수행 할 때
public static Object Load(string path)
{
return Load(path, typeof(Object));
}
첫 번째 코드와 문제입니다. Unity의 Object
으로 캐스팅을하면 제대로 작동합니다.
예 :
작동 두번째 파라미터없이 Resources.Load
함수를 사용하여 다음 가변가 null
하지한다
//OK
UnityEngine.Object asd = Resources.Load("test") as UnityEngine.Object;
ASD. 객체를로드해야하지만 은이 될 수 없습니다. Sprite
으로 전송하십시오.
당신이 변환 할 수 있기 때문에 이제, 당신이 Sprite
에 캐스팅 할 때, 그것은 null
될 것 유니티의 Object
Sprite
합니다. 아래 코드에서 주석을 읽어
//OK
UnityEngine.Object asd = Resources.Load("test") as UnityEngine.Object;
//NOT OK(NULL)
Sprite obj1 = asd as Sprite;
//NOT OK(NULL) + InvalidCastException
Sprite obj2 = (Sprite)asd;
다시,이 때문에 Sprite
에 캐스트에 null
를 반환합니다.
이 두 번째로드 기능이 추가 된 이유 :
public static Object Load(string path, Type systemTypeInstance);
내가 하나의 방법 또는 다른를 사용해야하는 이유 아무런 정보가 없습니다.
. 첫 번째 것은 프리 패브를로드하는 데 사용됩니다. GameObject를 만들 때, 그것을 Prefab로 만들어 Resources 폴더에 넣을 수 있습니다.
//OK
UnityEngine.Object asd = Resources.Load("test") as UnityEngine.Object;
//OK
GameObject obj2 = asd as GameObject;
OR
//OK
UnityEngine.Object asd = (GameObject)Resources.Load("test");
국지적 2 번째는 (.PNG, JPEG), 오디오, 비디오, FBX 이미지와 같은 파일을로드하는 데 사용된다
. 파일. 로드Object
하지
조립식 경우 //OK
Mesh model = Resources.Load("test", typeof(Mesh)) as Mesh;
//Not Ok
Mesh model2 = Resources.Load("test") as Mesh;
마지막으로, 다른 유형에 UnityEngine.Object
을 변환 할 수 없습니다 : 리소스 폴더에있는 FBX 파일을로드 예를 들어
. 그것은 조립식 일 수 있습니다. 이미지, 오디오, 비디오와 같은 파일이라면 Object
을 해당 파일 형식으로 변환 할 수 없습니다. 심지어 GameObject
로 변환하는 것은 불가능합니다.
Unity에서 Sprite
은 텍스처 형식이므로 유형 인수가없는 호출이 Texture2D
을 반환하고 캐스팅하지 못했을 가능성이 있습니다 (스프라이트는 본질적으로 텍스처의 하위 애셋입니다. . 유니티의 프로젝트 창
이 몇 가지 디버깅 결정하기 쉬워야한다, Object
로 먼저 저장하려고 디버거를 연결하고, 그 호출이 실제로 캐스트 전에 반환 무엇을 참조하십시오.
Object testObj = Resources.Load("test");
Texture text = testObj as Texture2D; // Probably a valid Texture2D
Sprite spr = testObj as Sprite; // Probably null
- 1. Unity Resources.Load가 Android에서 작동하지 않습니다.
- 2. System.Web.Mail이 작동하지 않는 이유 System.Net.Mail이 작동하지 않는 이유
- 3. 키보드 수신기가 작동하지 않는 이유 키보드 수신기가 작동하지 않는 이유
- 4. fs.readFileSync가 작동하지 않는 이유
- 5. DataStateBehavior가 작동하지 않는 이유
- 6. TimeSpan.ParseExact가 작동하지 않는 이유
- 7. ViewData가 작동하지 않는 이유
- 8. subprocess.Popen이 작동하지 않는 이유
- 9. 업데이트가 작동하지 않는 이유
- 10. providerRoute가 작동하지 않는 이유
- 11. .click이 작동하지 않는 이유
- 12. removeEventListener가 작동하지 않는 이유
- 13. 조각이 작동하지 않는 이유
- 14. 애니메이션이 작동하지 않는 이유
- 15. 버튼이 작동하지 않는 이유
- 16. Spree에서 작동하지 않는 이유
- 17. PNP4Nagios가 작동하지 않는 이유
- 18. 블록이 작동하지 않는 이유
- 19. 내 DbContext가 삭제되지 않는 이유 또는 예상대로 작동하지 않는 이유
- 20. 기록 방법이 작동하지 않는 이유
- 21. 지역 서버가 작동하지 않는 이유
- 22. tr : 호버링이 작동하지 않는 이유
- 23. @ font-face가 작동하지 않는 이유
- 24. 크롬에서 JavaScript가 작동하지 않는 이유
- 25. flask_sqlalchemy에서 UniqueConstraint가 작동하지 않는 이유
- 26. 내 JSON이 작동하지 않는 이유
- 27. 정적 ofstream이 작동하지 않는 이유
- 28. 이 코드가 작동하지 않는 이유
- 29. didReceiveData 함수가 작동하지 않는 이유
- 30. 정지 간격이 작동하지 않는 이유