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 |
Tags
- 드롭다운
- 행동트리
- unity korea
- sparkmain(clone)
- 깊이탐색
- GetComponent
- removeAll
- 오블완
- 유니티 sparkmain(clone)
- list clear
- unity sparkmain(clone)
- Unity
- C#
- articulation body
- 너비탐색
- readonly
- dfs
- navisworks api
- sparkmain(clone) 무한생성
- 유니티
- raycast
- 최소신장트리 mst
- BFS
- 최단거리 알고리즘
- 디지털트윈
- 트리구조
- dropdown
- 티스토리챌린지
- Simulation
- 크루스칼
Archives
- Today
- Total
낑깡의 게임 프로그래밍 도전기
Unity C# : Json Save기능 구현하기 (외부에서 불러들인 Fbx 모델링 저장) 본문
반응형
SMALL
외부에 있는 FBX 파일을 불러와서 유니티에서 사용하고, 그 상태를 저장한 후 다시 로드하는 기능을 구현
- 파일 시스템을 통해 모델 경로와 관련 정보를 저장하고, 다시 켰을 때 해당 경로로부터 모델을 불러오는 로직 작성
(만약 외부 모델이 삭제되었을 경우, 이를 감지하고 적절한 오류 처리)
오늘 사용해 볼 방식
예제 코드
모델 관리 스크립트
using System.Collections.Generic;
using System.IO;
using UnityEngine;
public class ModelManager : MonoBehaviour
{
[System.Serializable]
public class ModelData
{
public string modelPath;
public Vector3 position;
public Quaternion rotation;
}
[System.Serializable]
public class SaveData
{
public List<ModelData> models = new List<ModelData>();
}
private string saveFilePath;
void Start()
{
saveFilePath = Path.Combine(Application.persistentDataPath, "saveData.json");
LoadModels();
}
public void SaveModels(List<ModelData> modelDataList)
{
SaveData data = new SaveData { models = modelDataList };
string json = JsonUtility.ToJson(data);
File.WriteAllText(saveFilePath, json);
}
public void LoadModels()
{
if (File.Exists(saveFilePath))
{
string json = File.ReadAllText(saveFilePath);
SaveData data = JsonUtility.FromJson<SaveData>(json);
foreach (ModelData modelData in data.models)
{
LoadModel(modelData);
}
}
}
private void LoadModel(ModelData modelData)
{
if (File.Exists(modelData.modelPath))
{
// FBX 모델을 불러오는 로직 (아래는 예시)
GameObject model = ImportFBX(modelData.modelPath);
model.transform.position = modelData.position;
model.transform.rotation = modelData.rotation;
}
else
{
Debug.LogError($"Model file not found: {modelData.modelPath}");
}
}
private GameObject ImportFBX(string filePath)
{
// FBX 모델을 로드하는 로직을 구현 (예: FBXImporter 사용)
// 여기서는 단순히 placeholder로 반환
// 실제로는 FBXImporter 또는 유사한 플러그인을 사용하여 모델을 로드해야 함
GameObject model = new GameObject(Path.GetFileNameWithoutExtension(filePath));
return model;
}
}
예제 사용법
- 모델 저장:
- 외부에서 불러온 모델들의 경로, 위치, 회전 정보를 ModelData 리스트에 저장
- SaveModels 메소드를 호출하여 데이터를 JSON 파일에 저장
- 모델 로드:
- 유니티를 다시 켰을 때 LoadModels 메소드가 호출되어 저장된 경로에서 모델을 다시 로드
- 모델이 존재하지 않을 경우 에러 메시지를 출력
모델 저장 예시
void ExampleUsage()
{
List<ModelManager.ModelData> modelDataList = new List<ModelManager.ModelData>();
// 예시 모델 데이터 추가
ModelManager.ModelData modelData = new ModelManager.ModelData
{
modelPath = "C:/Models/myModel.fbx",
position = new Vector3(0, 0, 0),
rotation = Quaternion.identity
};
modelDataList.Add(modelData);
// 모델 저장
ModelManager modelManager = FindObjectOfType<ModelManager>();
modelManager.SaveModels(modelDataList);
}
모델 로드 예시
void Start()
{
ModelManager modelManager = FindObjectOfType<ModelManager>();
modelManager.LoadModels();
}
외부의 FBX 모델 파일 경로와 위치 정보를 저장하고 다시 로드하는 과정(모델을 로드할 때 해당 경로에 파일이 존재하지 않으면 에러 출력)
실제로 FBX 모델을 로드하는 로직은 ImportFBX 메소드에 구현해야 한다.(FBXImporter, TriLibCore와 같은 플러그인을 사용)
반응형
LIST