unity将遮挡人物的模型透明化_笔记

使用射线检测将挡住人物的模型透明化(未考虑性能问题)

原理:

      从相机向人物发射一条射线,将碰到的tag为"障碍"的模型mesh材质全换为透明贴图,并将当前透明化的材质存储,每帧刷新时复原。

前置条件:

      1. 将需要透明化的模型tag设置为"障碍"

      2. 将"BuildSetFasle()"函数放在update中执行

 private Material m_TMm;//一个透明的贴图
    private Dictionary<string, Material> m_ZMDic = new Dictionary<string, Material>(50);
    private Dictionary<string, MeshRenderer> m_ZMeshDic = new Dictionary<string, MeshRenderer>(50);
 #region 建筑透明
    public void BuildSetFasle()
    {
        foreach (var item in m_ZMeshDic)
        {
            item.Value.material = m_ZMDic[item.Key];
        }
        m_CameraPos = new Vector3(_camera.transform.position.x, _camera.transform.position.y, _camera.transform.position.z - 5);
        RaycastHit[] hit = Physics.RaycastAll(m_CameraPos, m_Pos.position - m_CameraPos, 13);
        Debug.DrawRay(m_CameraPos, (m_Pos.position - m_CameraPos) * 10, Color.yellow);
        for (int i = 0; i < hit.Length; i++)
        {
            if (hit[i].transform.tag == "障碍")
            {
                MeshRenderer m = hit[i].transform.GetComponent<MeshRenderer>();
                if (m)
                {
                    if (!m_ZMDic.ContainsKey(m.gameObject.name))
                    {
                        m_ZMeshDic.Add(m.gameObject.name, m);
                        m_ZMDic.Add(m.gameObject.name, m.material);
                    }
                    m.material = m_TMm;
                }
            }
        }
    }
    #endregion

### Unity 中相机移动时物体抖动的解决方案 在开发过程中遇到摄像机或物体抖动的情况确实会影响用户体验。针对这一问题,可以从多个角度来考虑解决方案。 #### 调整旋转顺序 当涉及到对象和摄像机的同时旋转操作时,调整这两者的执行顺序可以有效缓解抖动现象。例如,在处理外骨骼跟随视角转动的情况下,应当先更新主体的位置再改变摄像机的角度[^3]: ```csharp // 先让身体围绕Y轴转动 bodyTransform.rotation = Quaternion.Euler(0, rotationVector3.y, 0); // 然后再设置摄像机的方向 transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, Time.deltaTime * smoothSpeed); ``` 这里使用 `Quaternion.Lerp` 来实现平滑过渡效果,而不是直接赋值给 `rotation` 属性,从而减少了突兀的变化带来的视觉冲击感。 #### 减少模型复杂度与优化渲染性能 对于较为复杂的场景而言,降低模型细节层次(LOD)、应用遮挡剔除技术和烘焙光照都可以显著提高帧率稳定性,进而减轻由于低FPS引起的图像闪烁或跳跃感[^5]。具体措施如下: - **简化几何结构**:通过减少不必要的顶点数量以及合并相似材质等方式精简资源文件; - **启用 Occlusion Culling 功能**:自动隐藏被其他物体挡住的部分,节省计算开销; - **预计算全局照明数据**:提前准备好静态光源的效果,避免实时演算造成延迟。 #### 平滑化位置变化过程 为了防止快速变换引起的人眼不适反应,建议引入插值算法使得运动更加流畅自然。比如利用 `Mathf.SmoothDamp()` 方法逐步接近目标坐标而非瞬时间跃迁至新地点[^2]: ```csharp void Update() { Vector3 newPosition = Mathf.SmoothDamp(transform.position, destinationPosition, ref velocity, dampTime); transform.position = newPosition; } ``` 上述代码片段展示了如何基于当前速度向量逐渐靠近指定终点的过程,其中参数 `dampTime` 控制着整个动作的速度快慢程度。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值