You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Photon Pun2多人环境中通过ReadyPlayerMe URL加载角色遇阻求助

基于C#的ReadyPlayerMe角色加载与Photon PUN同步方案

前置准备

  • 确保Unity项目已正确导入ReadyPlayerMe Avatar Loader和Photon PUN 2包
  • 完成Photon项目基础配置(填入AppID、设置房间规则等)
  • 在ReadyPlayerMe设置面板中,启用「Allow Remote Avatar Loading」选项

核心加载脚本实现

创建名为RPM_PhotonAvatarLoader的C#脚本,挂载到玩家预制体上:

using UnityEngine;
using Photon.Pun;
using ReadyPlayerMe.AvatarLoader;

public class RPM_PhotonAvatarLoader : MonoBehaviourPunCallbacks, IPunObservable
{
    [SerializeField] private string defaultAvatarUrl = "你的默认角色URL";
    private AvatarLoader avatarLoader;
    private string currentAvatarUrl;

    void Start()
    {
        avatarLoader = gameObject.AddComponent<AvatarLoader>();
        avatarLoader.OnCompleted += OnAvatarLoaded;
        avatarLoader.OnFailed += OnAvatarLoadFailed;

        // 本地玩家主动加载角色,远程玩家等待URL同步
        if (photonView.IsMine)
        {
            // 可替换为从本地存储/UI输入获取的自定义角色URL
            LoadAvatar(defaultAvatarUrl);
        }
    }

    public void LoadAvatar(string avatarUrl)
    {
        currentAvatarUrl = avatarUrl;
        if (photonView.IsMine)
        {
            avatarLoader.LoadAvatar(avatarUrl);
        }
    }

    private void OnAvatarLoaded(object sender, AvatarLoadEventArgs args)
    {
        // 适配角色与玩家预制体的父子关系及初始变换
        args.Avatar.transform.parent = transform;
        args.Avatar.transform.localPosition = Vector3.zero;
        args.Avatar.transform.localRotation = Quaternion.identity;
    }

    private void OnAvatarLoadFailed(object sender, FailureEventArgs args)
    {
        Debug.LogError($"角色加载失败: {args.Message}");
    }

    // 同步角色URL至其他客户端
    public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
    {
        if (stream.IsWriting)
        {
            stream.SendNext(currentAvatarUrl);
        }
        else
        {
            currentAvatarUrl = (string)stream.ReceiveNext();
            // 远程客户端加载同步得到的角色
            if (!photonView.IsMine)
            {
                avatarLoader.LoadAvatar(currentAvatarUrl);
            }
        }
    }
}

关键配置与问题排查

  • 玩家预制体必须添加PhotonView组件,并将RPM_PhotonAvatarLoader加入PhotonView的观察列表
  • 加载失败常见原因排查:
    • 验证角色URL有效性(可直接在浏览器打开测试)
    • 在Unity「Player Settings」中启用「Allow downloads over HTTP」(针对非HTTPS的URL)
    • 确认ReadyPlayerMe的API密钥配置正确(若使用自定义角色生成功能)
  • 避免在Awake阶段执行加载逻辑,需等待Photon连接完成后再触发

内容的提问来源于stack exchange,提问作者Sachin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 04:05:18