8-1.存储点及画面效果
制作一个可以点亮的存储点
切图
第一张是存储点的基座,第二张是存储点上面的文字
将它们组合在一起就是存储点了
让存储点可交互
核心代码与宝箱的代码完全一致
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 改成蓝色,这样整个场景就以蓝色为基调了
开启后处理
摄像机要勾选 Post Processing
图层也要勾选 Post Processing
让存储点更亮
在存储点上面添加 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 组件,将其与子物体合并算为一个物体进行叠层排序,设置内容如下: