【学习笔记】Unity2D使用shader使指定部分发光

前言

在Unity游戏开发中,使游戏中的特定物体或场景部分发出指定的光芒,能够增强视觉效果,提升整体的游戏体验。该方法参照了B站大佬的视频,本文只会简单的讲解制作过程,不会对shader进行更深入的探讨。(使用的Unity版本为2023.2.20)

想要更详细了解请移步

【Unity教程】使用ShaderGraph让贴图中指定部分发光, 做出炫酷的效果_哔哩哔哩_bilibili

图片

一、准备图片

首先要准备好完整的单张图片,里面包含了所有将会用到的动作(以下将其称为主图片)

将Texture Type改为Sprit(2D and UI) ,

Sprite Mode改为Multiple,

Pixel Per Unit根据自己需求更改,

Filter Mode 和一般改为Point(no filter)(一般对像素图片素材而言),

Compression改为High Quality。

二、修改图片

修改图片,绘制我们想要其指定发光的位置,使其具有相同大小,将发光位置变成白色,其余地方设置为黑色 

这里我将攻击特效单独抠出来制作成白色黑底。

三、导入图片

将图片导入Unity中,进入主图片的编辑界面

选择Secondary Textures

在右下角的位置添加修改后的图片作为纹理,命名时在首位添加下划线"_"

项目的一些准备工作

一、安装包

打开注册表,确保安装了后处理,URP,ShaderGraph

二、设置URP

新建一个URP Asset

在项目设置里把新建的URP Asset拽入里面,只需要让Graphics里有URP Asset不需要对其进行更改

三、后处理

在主摄像机里选中后处理

四、Global Volume

在场景里新建Global Volume

五、Bloom

点击New,再点击添加组件搜索Bloom

选中Threahold和Intensity(Threshold改大和Intensity改小都会减少亮度)

六、Global Light 2D

加入全局灯光2D

Intensity值会改变场景的亮度,数值越大越亮

制作Shader Graph

一、新建Shader Graph

最后来制作攻击特效,在Asset里创建一个Sprite Lit Shader Graph

二、创建Material

点击刚刚创建的ShaderGraph右键创造一个Material

创建的材质会与ShaderGraph自动绑定,如果没有绑定,点击Shader搜索创建好的ShaderGraph进行绑定

三、编辑Shader

打开Shader编辑器

(1)添加参数

点击+添加以下几种参数

(2)设置纹理

MianImage为人物的主图片纹理,EffectImage和WeaponImage为攻击特效图纹理和武器特效图纹理,在Default中可以添加图片作为纹理

(3)编辑节点

在编辑器的空白处右键选择Create Node,再通过搜索新建节点,编辑好节点如下图

点击保存

为人物添加Shader

一、修改人物的Sprite Renderer

Sprite 添加的是主图片的素材,人物的动画也必须使用主图片里的素材,否则达不到想要的效果

Material选择我们创建好的那个

二、调节参数

在Inspector下面找到Material可以调节在ShaderGraph设置的参数,

EmissingColor是攻击特效的颜色,SwordColor是武器特效的颜色,EffectAmount可以调节发光亮度(从0到1亮度越来越小)

三、效果实现

现在效果就实现了

四、编写代码

下面写一段代码,通过代码调节Material里的参数,使图片有一个闪烁的效果,要注意参数名前面要加上下划线“_”

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{
    float timer;
    bool isOpen;

    private SpriteRenderer spriteRenderer;
    void Start()
    {
        spriteRenderer = GetComponent<SpriteRenderer>();
    }

    void Update()
    {
        if(timer<=1)
        {
            timer +=Time.deltaTime;
        }
        if(timer>1)
        {
            timer = 0;//让时间归零
            isOpen = !isOpen;//取反
        }
        
        if(isOpen)
        {
            spriteRenderer.material.SetFloat("_EffectAmount", timer);
        }
        else
            spriteRenderer.material.SetFloat("_EffectAmount", 1-timer);

    }
}

 现在人物手中的剑就有了一个来回闪烁的效果

图片闪烁

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值