首页 > 其他分享 >8-1.存储点及画面效果

8-1.存储点及画面效果

时间:2024-02-29 09:01:10浏览次数:30  
标签:场景 效果 Volume 画面 添加 存储点 public isDone

制作一个可以点亮的存储点

切图

第一张是存储点的基座,第二张是存储点上面的文字

将它们组合在一起就是存储点了

让存储点可交互

核心代码与宝箱的代码完全一致

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

标签:20240229_0826

标签:场景,效果,Volume,画面,添加,存储点,public,isDone
From: https://www.cnblogs.com/hellozjf/p/18042626

相关文章

  • 7-5. 场景淡入淡出效果
    DoTween实现淡入淡出定义淡入淡出事件切换场景的时候发布淡入淡出事件卸载场景的时候,蒙版变黑场景加载完之后,蒙版变透明创建FadeCanvas以及监听淡入淡出事件项目相关代码代码仓库:https://gitee.com/nbda1121440/2DAdventure.git标签:20240228_1531......
  • Markdown效果测试
    Markdownlearning新学的Markdown,来看看效果!一、段落IreallylikeusingMarkdown.IthinkI'lluseittoformatallofmydocumentsfromnowon.二、换行方法一:Thisisthefirstline.Thisisthesecondline.方法二:Thisisthefirstline.Firstlinewithth......
  • el-table分页时实现切换分页多选选中效果并且编辑回显默认选中
    <el-tableref="table":data="tableData"borderheight="100%":row-key="getRowKeys"@selection-change="handleSelectionChange"></el-table>关键代码:1::row-key="getRowKeys&quo......
  • 河北稳控科技振弦采集仪在桥梁岩土工程中的应用与效果评价
    振弦采集仪在桥梁岩土工程中的应用与效果评价河北稳控科技振弦采集仪是一种用于结构动力测试的仪器,也可以应用于桥梁和岩土工程中。其主要作用是通过测量结构的振动特性,分析结构的动态行为,评估结构的健康状况和性能。 在桥梁工程中,振弦采集仪可以用来监测桥梁结构的振动响应......
  • 自研Uncrop对比Stability AI效果
    https://stability.ai/news/clipdrop-launches-uncrop-the-ultimate-aspect-ratio-editor官网展示效果自研效果初始一次扩图二次扩图......
  • 在Winform界面中使用自定义控件,丰富界面的效果处理
    我们在《SqlSugar开发框架》中,Winform界面开发部分往往也用到了自定义的用户控件,对应一些特殊的界面或者常用到的一些局部界面内容,我们可以使用自定义的用户控件来提高界面的统一性,同时也增强了使用的便利性。如我们Winform界面中用到的分页控件、附件显示内容、以及一些公司、部......
  • 依赖注入(Dependency Injection, DI)是一种设计模式,例如,在React中,父组件可以通过props向
    依赖注入renderprops其实就是React世界中的“依赖注入”(DependencyInjection)。所谓依赖注入,指的是解决这样一个问题:逻辑A依赖于逻辑B,如果让A直接依赖于B,当然可行,但是A就没法做得通用了。依赖注入就是把B的逻辑以函数形式传递给A,A和B之间只需要对这个函数......
  • LCD液晶超抗干扰段码显示屏驱动芯片VK1C21A/B/C/D/DA/E/EA具备显示效果好,静电耐压高等
    产品型号:VK1C21A/B产品品牌:永嘉微电/VINKA封装形式:SSOP48/LQFP48可定制裸片:DICE(COB邦定片);COG(邦定玻璃用)产品年份:新年份原厂,工程服务,技术支持! 概述:VK1C21A/B是一个点阵式存储映射的LCD驱动器,可支持最大128点(32SEGx4COM)的LCD屏,也支持2COM和3COM的LCD屏。单片机可通过......
  • LCD液晶超抗干扰段码显示屏驱动芯片VK1C21A/B/C/D/DA/E/EA具备显示效果好,静电耐压高等
    产品型号:VK1C21A/B产品品牌:永嘉微电/VINKA封装形式:SSOP48/LQFP48可定制裸片:DICE(COB邦定片);COG(邦定玻璃用)产品年份:新年份 概述:VK1C21A/B是一个点阵式存储映射的LCD驱动器,可支持最大128点(32SEGx4COM)的LCD屏,也支持2COM和3COM的LCD屏。单片机可通过3/4个通信脚配置显示参数......
  • && 短路效果测试
    C#:staticvoidMain(string[]args){boolresult=true;result&=Func();result&=Func();result&=Func();Console.WriteLine("&=最后结果:{0}\n",result);Console.ReadKey();result=result......