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

Unity 2D实现仅渲染角色视野内容:隐藏视野外光源

Unity 2D 玩家视野范围渲染实现方案

针对你要做的俯视角射击游戏,只渲染玩家黄色矩形视野内的物体(包括隐藏视野外的光源,保留视野内光影),可以按以下步骤操作:

一、用Sprite Mask实现视野遮罩

  • 创建一个跟随玩家移动的Sprite Mask对象,导入和玩家视野形状一致的矩形Sprite(或直接用Unity基本图形生成),调整大小和位置完全覆盖玩家视野区域。
  • 把Sprite Mask的Mask Interaction设置为Visible Inside Mask,这样只有遮罩内部的内容会被渲染。
  • 给所有需要被视野控制的物体(场景道具、敌人、第二个光源的Sprite等)添加Sprite Renderer,并将它们的Mask Interaction设为Visible Inside Mask,确保这些物体只在遮罩内显示。

二、控制光源的可见性

方法1:通过Light Layer分层控制

  • 在Project Settings的Tags and Layers中,添加两个自定义Light Layer:PlayerViewLight和OtherLight。
  • 给玩家的黄色视野光源设置Light Layer为PlayerViewLight,第二个光源设为OtherLight。
  • 回到Sprite Mask的设置,在Light Layer Mask里只勾选PlayerViewLight,这样只有玩家视野内的区域能显示PlayerViewLight的光照,而OtherLight的光照只会在遮罩内生效(遮罩外的物体已被隐藏,所以外部光照不会被看到)。

方法2:脚本动态控制光源启用

如果需要更精准的检测(比如光源部分进入视野就显示),可以给第二个光源添加以下脚本:

using UnityEngine;
using UnityEngine.Experimental.Rendering.Universal;

public class LightInViewChecker : MonoBehaviour
{
    public SpriteMask playerViewMask;
    private Light2D targetLight;
    private Rect maskWorldRect;

    void Awake()
    {
        targetLight = GetComponent<Light2D>();
        UpdateMaskRect();
    }

    void Update()
    {
        UpdateMaskRect();
        // 检测光源是否在遮罩范围内
        targetLight.enabled = maskWorldRect.Contains(transform.position);
    }

    void UpdateMaskRect()
    {
        Vector2 maskPos = playerViewMask.transform.position;
        Vector2 maskSize = playerViewMask.sprite.bounds.size;
        maskSize.Scale(playerViewMask.transform.localScale);
        maskWorldRect = new Rect(maskPos.x - maskSize.x/2, maskPos.y - maskSize.y/2, maskSize.x, maskSize.y);
    }
}

把玩家的Sprite Mask拖到脚本的playerViewMask字段,这样第二个光源只有在进入玩家视野时才会启用。

三、优化光影与阴影显示

  • 给场景中带Shadow Caster 2D的物体,同样设置Mask Interaction为Visible Inside Mask,确保遮罩外的阴影不会被渲染。
  • 如果使用URP,打开2D Renderer的设置面板,确认Masking模块已启用,并且设置为Soft Masking(如果需要柔和的边缘过渡)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 02:10:15