写一个unity把外部的模型加载到打包后的场景中的脚本,不使用assetbundle
时间: 2024-03-20 07:39:46 浏览: 22
以下是一个简单的Unity脚本,可以将外部模型加载到打包后的场景中:
```csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ModelLoader : MonoBehaviour
{
public string modelFileName; // 模型文件名(包含扩展名)
public string modelFilePath; // 模型文件路径
void Start()
{
LoadModel();
}
void LoadModel()
{
// 从指定路径读取模型文件
string fullPath = System.IO.Path.Combine(modelFilePath, modelFileName);
GameObject modelPrefab = null;
if (fullPath.ToLower().EndsWith(".obj"))
{
// 如果是OBJ格式的模型文件,使用Unity自带的OBJImporter来导入
ObjImporter objImporter = new ObjImporter();
Mesh objMesh = objImporter.ImportFile(fullPath);
if (objMesh != null)
{
// 创建一个空的GameObject,并将OBJ模型作为其MeshFilter的Mesh
modelPrefab = new GameObject();
modelPrefab.AddComponent<MeshFilter>().mesh = objMesh;
modelPrefab.AddComponent<MeshRenderer>();
}
}
else
{
// 如果是其他格式的模型文件,使用Unity自带的AssetDatabase来加载
modelPrefab = UnityEditor.AssetDatabase.LoadAssetAtPath<GameObject>(fullPath);
}
if (modelPrefab != null)
{
// 创建一个模型实例,并将其添加到场景中
GameObject modelInstance = Instantiate(modelPrefab);
modelInstance.transform.SetParent(this.transform);
modelInstance.transform.localPosition = Vector3.zero;
modelInstance.transform.localRotation = Quaternion.identity;
}
}
}
```
这个脚本同样需要指定模型文件名和路径,它会在场景启动时自动加载模型。与之前的脚本不同的是,这个脚本不使用AssetBundle,而是直接读取模型文件并将其导入到场景中。这个脚本支持OBJ格式的模型文件,如果您需要加载其他格式的模型文件,可以使用Unity自带的AssetDatabase来加载。请注意,使用AssetDatabase来加载模型文件可能会影响性能,因为它需要在运行时解析模型文件并生成对应的Unity对象。