修改Ready Player Me Avatar Loader的官方unity的场景QuickStart,修改RPM Player预制体改成把模型下载到本地StreamingAssets,再用非AB包的方式加载出来
时间: 2024-05-05 13:16:52 浏览: 130
Darklight黑暗之光(2019-2021).zip项目unity源码下载
5星 · 资源好评率100%
1. 首先,在Unity中打开Ready Player Me Avatar Loader的QuickStart场景。
2. 打开RPM Player预制体,找到其中的AvatarLoader脚本。
3. 修改AvatarLoader脚本,将下载模型的代码修改为将模型下载到本地StreamingAssets文件夹中。具体代码如下:
```csharp
IEnumerator DownloadAvatarModel(string url)
{
// 将模型下载到本地StreamingAssets文件夹中
string filePath = Application.streamingAssetsPath + "/avatar.obj";
using (UnityWebRequest uwr = UnityWebRequest.Get(url))
{
yield return uwr.SendWebRequest();
if (uwr.result == UnityWebRequest.Result.Success)
{
byte[] bytes = uwr.downloadHandler.data;
File.WriteAllBytes(filePath, bytes);
}
else
{
Debug.LogError("Download failed: " + uwr.error);
}
}
}
```
4. 修改AvatarLoader脚本,将加载模型的代码修改为使用非AB包的方式加载出来。具体代码如下:
```csharp
IEnumerator LoadAvatarModel(string filePath)
{
// 使用非AB包的方式加载模型
GameObject avatar = new GameObject();
avatar.AddComponent<MeshFilter>();
avatar.AddComponent<MeshRenderer>();
avatar.GetComponent<MeshFilter>().mesh = new ObjImporter().ImportFile(filePath);
avatar.GetComponent<MeshRenderer>().material = new Material(Shader.Find("Standard"));
avatar.transform.localScale = Vector3.one * 0.01f;
avatar.transform.position = new Vector3(0, 1, 0);
avatar.transform.rotation = Quaternion.identity;
yield return new WaitForSeconds(0.1f);
// 触发AvatarLoaded事件,通知其他脚本模型已加载完成
AvatarLoaded?.Invoke(avatar);
}
```
5. 保存修改后的AvatarLoader脚本,回到Unity场景中。
6. 在场景中添加一个空GameObject,命名为AvatarLoader。
7. 将修改后的RPM Player预制体拖拽到AvatarLoader对象下,作为AvatarLoader的子对象。
8. 在AvatarLoader对象上添加一个新的脚本AvatarLoaderManager,用于管理AvatarLoader的行为。
9. 在AvatarLoaderManager脚本中,添加以下代码,用于触发AvatarLoader的下载和加载模型的操作:
```csharp
public class AvatarLoaderManager : MonoBehaviour
{
private AvatarLoader _avatarLoader;
void Start()
{
_avatarLoader = GetComponentInChildren<AvatarLoader>();
// 下载并加载模型
StartCoroutine(DownloadAndLoadAvatarModel());
}
IEnumerator DownloadAndLoadAvatarModel()
{
yield return StartCoroutine(_avatarLoader.DownloadAvatarModel());
yield return StartCoroutine(_avatarLoader.LoadAvatarModel(Application.streamingAssetsPath + "/avatar.obj"));
}
}
```
10. 保存修改后的AvatarLoaderManager脚本,运行场景,可以看到AvatarLoader开始下载并加载模型。模型加载完成后,可以在场景中看到Avatar模型。
阅读全文