You need to enable JavaScript to run this app. PUN 2.0相机渲染设置:如何差异化本地与其他玩家可见模型
优惠活动
大模型
产品
解决方案
定价
更多

PUN 2.0相机渲染设置:如何差异化本地与其他玩家可见模型

PUN 2.0 第一视角分层渲染实现方案

你之前用Culling Mask没有达到预期,核心原因通常是没有结合PUN的玩家身份判断做动态层级分配,所有玩家实例复用了相同的层级配置,导致裁剪规则被统一应用到本地和远端玩家身上。可落地的实现步骤如下:

1. 预先配置Unity层级

在Unity的Tags and Layers面板中新增3个独立层级,建议选20号之后的序号避免和内置层级冲突:

  • LocalPlayerBody:存储本地玩家的完整身体模型
  • LocalPlayerHand:存储本地玩家的第一视角手部模型
  • RemotePlayerModel:存储远端玩家的完整可显示模型

2. 玩家预制件结构调整

提前在玩家预制件中做好模块拆分,不要将身体和手部模型合并在同一个Mesh或者父物体下:

  • 单独挂载本地完整身体模型的父节点
  • 单独挂载本地第一视角手部模型的父节点
  • 单独挂载远端玩家不需要显示的手部绑定节点

3. 实例化时动态配置渲染规则

在玩家预制件上挂载初始化脚本,实例化时通过PhotonView.IsMine判断玩家身份,动态设置激活状态和层级:

using Photon.Pun;
using UnityEngine;

public class PlayerRenderSetup : MonoBehaviourPun
{
    [Header("本地玩家专属模块")]
    [SerializeField] private GameObject localFullBody;
    [SerializeField] private GameObject localFirstPersonHand;
    [Header("远端玩家隐藏模块")]
    [SerializeField] private GameObject remotePlayerHandBind;

    private void Start()
    {
        if (photonView.IsMine)
        {
            // 本地玩家渲染配置
            localFullBody.layer = LayerMask.NameToLayer("LocalPlayerBody");
            localFirstPersonHand.SetActive(true);
            localFirstPersonHand.layer = LayerMask.NameToLayer("LocalPlayerHand");
            remotePlayerHandBind.SetActive(false);

            // 动态修改主相机裁剪层
            int bodyLayer = 1 << LayerMask.NameToLayer("LocalPlayerBody");
            int handLayer = 1 << LayerMask.NameToLayer("LocalPlayerHand");
            // 关闭本地身体层显示,开启本地手部层显示,保留原有其他层级配置
            Camera.main.cullingMask = (Camera.main.cullingMask & ~bodyLayer) | handLayer;
        }
        else
        {
            // 远端玩家渲染配置
            localFullBody.layer = LayerMask.NameToLayer("RemotePlayerModel");
            localFirstPersonHand.SetActive(false);
            remotePlayerHandBind.SetActive(false);
            localFullBody.SetActive(true);
        }
    }
}

4. 常见问题排查

  • 不要直接修改预制件的默认层级,必须在实例化后动态赋值,否则所有客户端的玩家实例都会复用相同层级,导致裁剪规则失效
  • 如果项目使用多相机叠加渲染,需要同步修改所有负责3D场景渲染的相机的Culling Mask
  • 如果后续需要添加影子渲染,可单独给影子投射器设置层级,避免本地玩家身体影子被裁剪

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 06:00:04