Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 네임드 파라미터
- 플러터
- 싱글톤
- Unity
- 유니티최적화
- 플러터프로젝트
- 4KUnity
- unity icon
- 다트기초
- 유니티
- MemoryBarrier
- OPCUA
- memorymangement
- Unity3d
- flutter folder
- 메모리배리어
- C# memorybarrior
- Flutter
- 포지션 파라미터
- named parameter
- 폴더구성
- Csharp
- position parameter
- 플러터폴더
- unity 아이콘 깨짐
- optional prameter
- XR
- c#
- xml unity
- Unity 4k 아이콘 깨짐
Archives
- Today
- Total
배 타다 개발자
[유니티] 프리팹을 씬에 효과적으로 로딩하는 방법 - Resource Manager 본문
유니티에서 프리팹을 로딩하는 방법에 대해서 정리합니다.
방법 1 : 에디터에서 드래그 드랍해서 생성
씬에 객체를 생성할 때, 아래와 같은 스크립트형식은 같이 유니티의 장점을 활용하여서 에디터에서 프리팹을 드래그 드랍해서 씬에 생성해주는 방법이 가장 쉬운 방법입니다.
'StaticMesh'라는 프리팹이 씬에 로딩이 될겁니다.
방법 2 : 스크립트 컴포넌트에서 직접 접근하여 생성
두번째 방법으로는 스크립트 컴포넌트에서 Assets/Resources 이하 파일 시스템에 접근하여서 로드시키는 방법입니다.
플레이하면 씬에 Assets/Resources/Prefabs 파일의 StaticMesh 라는 프리팹이 로딩됩니다.
ResourceManager 로 로딩/생성/파괴를 싱글톤매니저에서 관리.
위의 두가지 방법으로 프리팹을 로딩하다보면,
누가 언제 무엇을 언제 만드는 지 헷갈리게 됩니다.
ResourceManager를 싱글톤매니저에 등록해서 프리팹을 로딩하는 방식을 만들어봅니다.
ResourceManager 스크립트를 하나 생성하고, Monobahaviour 상속은 해제시킵니다.
이제 싱글톤 매니터 스크립트에는 ResouceManager를 생성하고,
다른 클래스에서 접근할때 Manager.Resource로 접근할 수 있게
프로퍼티를 다음과 같이 만들어 줍니다.
테스트
이제 단순하게 싱글톤매니저에서 StaticMesh라는 프리팹을 생성하도록
PrefabTest 스크립트 컴포넌트를 작성하면 싱글톤 매니저에서 ATC 프리팹을 생성합니다.
플레이를 누르면 씬에 프리팹이 생성되었습니다.
코드
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 리소스의 Load, Instantiate, Destroy 를 관리하는 리소스 매니저.
public class ResourceManager
{
// path에 있느 파일을 로드하는 함수, 로드되는 조건은 Object 일 때
public T Load<T>(string path) where T : Object
{
return Resources.Load<T>(path);
}
// 생성
// parent는 프리팹을 생성해서 붙일 곳
public GameObject Instantiate(string path, Transform parent = null)
{
GameObject prefab = Load<GameObject>($"Prefabs/{path}");
if(prefab == null)
{
Debug.Log($"Failed to load prefab : {path}");
return null;
}
return Object.Instantiate(prefab, parent);
}
public void Destroy(GameObject go)
{
if (go == null) return;
Object.Destroy(go);
}
}
'Graphics > Unity 3D' 카테고리의 다른 글
[Unity] Raycasting (0) | 2021.12.09 |
---|---|
유니티로 GIS 구현하기 (0) | 2021.11.29 |
[유니티3D] 홀로렌즈 없이 홀로렌즈 앱 만들기 - 프로젝트환경 세팅 (0) | 2021.10.18 |
[유니티] 실전 싱글톤 프로젝트 세팅 (0) | 2021.10.18 |
[유니티 ]키를 입력을 관리하는 InputManager (0) | 2021.10.17 |