制作一个可以点亮的存储点
切图
第一张是存储点的基座,第二张是存储点上面的文字
将它们组合在一起就是存储点了
让存储点可交互
核心代码与宝箱的代码完全一致
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Rendering.Universal;
public class SavePointRock : MonoBehaviour, IInteractable
{
[Header("广播")]
public VoidEventSO LoadGameDataEvent;
[Header("变量参数")]
public SpriteRenderer childSpriteRenderer;
public Light2D light2D;
public Sprite darkSprite;
public Sprite lightSprite;
public bool isDone = false;
private void OnEnable()
{
childSpriteRenderer.sprite = isDone ? lightSprite : darkSprite;
light2D.enabled = isDone;
}
public void TriggerAction()
{
LightUpRock();
}
/// <summary>
/// 点亮石头
/// </summary>
private void LightUpRock()
{
if (isDone)
{
return;
}
childSpriteRenderer.sprite = lightSprite;
isDone = true;
light2D.gameObject.SetActive(true);
gameObject.tag = "Untagged";
// 保存数据
LoadGameDataEvent.RaiseEvent();
}
}
让存储点继承 IInteractable,在 OnEnable 的时候根据当前是否点亮显示不同的图片,并且在交互的方法 TriggerAction 里面执行点亮逻辑。点亮的话也是替换图片,标记已经完成,修改标签
接着把脚本挂载到存储点上面,给存储点添加一个trigger,并把它放到 Interactable 标签上
增强画面效果
修改全局光照
找到场景中的 Global Light 2D,把 Color 改成蓝色,这样整个场景就以蓝色为基调了
让存储点更亮
在存储点上面添加 Spot Light 2D,配置如下
可以对比一下没有点光源的存储点
这个点光源也需要在存储点激活的时候开启,代码在前面 让存储点可交互 已经写了
修改全局 Volume
通过 GameObject -> Volume -> Global Volume,添加全局 Volume,然后创建一个新的 Profile,在里面添加 Bloom 曝光
下面两张图是有曝光和没曝光的区别
修改局部 Volume
在同一个场景中,我希望上面是亮地,下面是暗的,这个应该如何实现呢?可以通过 Box Volume 实现。
在上面添加一个 Box Volume,修改它的 Trigger 范围,修改 Volume 的 Blend Distance(这个距离是摄像机距离场景的距离,2D 游戏中摄像机距离场景为 10)以及 Color Adjustments
接着进入场景看看,有局部 Volume 和没有局部 Volume 的区别
额外补充
为了避免 Sign Sprite 叠加在其他物品上导致穿帮,应该在 Save Point Rock 物体上添加 Sort Group 组件,将其与子物体合并算为一个物体进行叠层排序,设置内容如下:
项目相关代码
代码仓库:https://gitee.com/nbda1121440/2DAdventure.git
标签:场景,效果,Volume,画面,添加,存储点,public,isDone From: https://www.cnblogs.com/hellozjf/p/18042626