Unity实现图片闪烁

这篇具有很好参考价值的文章主要介绍了Unity实现图片闪烁。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

先上效果:

unity图片描边闪烁,Unity基础,c#,unity

原理

图片闪烁可以采取很多底层逻辑实现,像一些早期的街机游戏受击闪烁的实现机制是在受击的那一帧让模型变成白色。在这里我们采取透明度循环变化的方案实现。

逐帧动画实现

这个方案相对于另外两个方案是比较繁琐的,要有一组透明度循环变化的图片。

注意是循环变化也就是说要变到最值后在变回去
示例里的透明度分别为:
0.4 0.6 0.8 1 0.8 0.6 0.4

首先将素材导入
然后如果是3D模板的话要设置下图片的参数。
全选全部图片→在Inspector面板上设置Texture Type为Sprite→设置SpriteMode为Single→在面板往下拉,找到并点击Apply
unity图片描边闪烁,Unity基础,c#,unity
剩下的就是正常制作帧动画的流程了
unity图片描边闪烁,Unity基础,c#,unity速度的话在Animator里可以调
unity图片描边闪烁,Unity基础,c#,unity

Animation录制

这个方案只需要一张图片。
导入素材和上面一样。
3D模板的话也要设置下参数。
对Animation不是很熟悉的朋友可以先补补这方面的知识。

唤出Animation窗口
unity图片描边闪烁,Unity基础,c#,unity
也可以直接Ctrl+6唤出窗口

创建AnimationClipunity图片描边闪烁,Unity基础,c#,unity

开始录制

在中间插入关键帧首先使其变化到极值
unity图片描边闪烁,Unity基础,c#,unity

在末尾插入关键帧使其回到原样
unity图片描边闪烁,Unity基础,c#,unity

到这Animation就做完了

c#脚本实现

这个方案也只需要一张图片。
这是笔者推荐的做法,也是本文的重点讨论对象。
这个方案相对于前两个方案有着明显的通用性和灵活性。但是弊端是需要占用一定算力资源。
我这里采用的写法有点像Update计时器,还不太了解的朋友可以移步Unity计时的实现,其中的第一种计时方式就是Update计时器。

现在这是开始写这个工具脚本:

首先给组件加上RequireComponent特性确保健壮性

	[RequireComponent(typeof(Image))]

缓存Image组件的对象

	private Image image;
	private void OnEnable()
	{
    	image = GetComponent<Image>();
	}

将透明度的边界和变化速度暴露到Inspector面板,并定义一个变量来记录变化方向

	//Range特性指定参数在Inspector中的变化范围
	//Unity中用描述色值用的是RGB 0-1.0
	//所有色彩通道0为完全不具有1为完全具有
	//所以在这里0是全透明,1是全不透明
	[Range(0,1)]
	public float rangeLeft;
	[Range(0,1)]
	public float rangeRight;
	public float speed = 1;
	private int direction = 1;

现在是核心代码,在Update里逐帧更新组件

	private void Update()
    {
    	//先区别两个边界的大小
        float small;
        float big;
        if (rangeLeft > rangeRight)
        {
            big=rangeLeft;
            small=rangeRight;
        }
        else
        {
            big=rangeRight;
            small=rangeLeft;
        }
        //这一帧透明度应该变化多少
        float pre=speed*direction*Time.deltaTime;
        //本帧的透明度应变为多少
        float target = image.color.a + pre;
        //方向大于0即向更大的边界变化时
        //大于大边界为越界
        if (direction > 0)
        {
        	//如果越界了
            if (target > big)
            {
            	//将应为的透明度设为边界以避免越界
                target= big;
                //逆转方向,从下一帧开始朝另一个边界靠近
                direction *= -1;
            }
        }
        //方向小于0
        //小于小边界为越界
        else
        {
        	//如果越界了则同上
            if(target < small)
            {
                target= small;
                direction *= -1;
            }
        }
        //获取image原来的颜色
        Color oColor= image.color;
        //除了Alpha通道外其他通道的值要保留原样
        //target是上面计算出的应变为的透明度
        image.color = new(oColor.r, oColor.g, oColor.b, target);
    }

完整版

using UnityEngine;
using UnityEngine.UI;

[RequireComponent(typeof(Image))]
public class Twiklable : MonoBehaviour
{
    private Image image;
    [Range(0,1)]
    public float rangeLeft;
    [Range(0,1)]
    public float rangeRight;
    public float speed = 1;
    public float delay = 0;
    private int direction = 1;
    private void OnEnable()
    {
        image = GetComponent<Image>();
    }
    private void Update()
    {
        float small;
        float big;
        if (rangeLeft > rangeRight)
        {
            big=rangeLeft;
            small=rangeRight;
        }
        else
        {
            big=rangeRight;
            small=rangeLeft;
        }
        float pre=speed*direction*Time.deltaTime;
        float target = image.color.a + pre;
        if (direction > 0)
        {
            if (target > big)
            {
                target= big;
                direction *= -1;
            }
        }
        else
        {
            if(target < small)
            {
                target= small;
                direction *= -1;
            }
        }
        Color oColor= image.color;
        image.color = new(oColor.r, oColor.g, oColor.b, target);
    }
}

本人初来乍到,许多不足之处,欢迎大家斧正。文章来源地址https://www.toymoban.com/news/detail-800690.html

到了这里,关于Unity实现图片闪烁的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity 基于法线和深度实现完美描边,可独立控制物体描边

    最近项目需要快速出一版卡通渲染风格进行吸量测试。但是原来的模型非常不适合使用back face 的描边方案(很难看),不得已寻求其他的描边方案,于是有了现在这篇基于法线和深度的后处理描边。 优点: 描边宽度一致。 重叠部分也能有描边。 不会出现断裂 缺点: 后处理时

    2024年01月15日
    浏览(53)
  • Unity UGUI 边缘泛光 描边 的简单实现

    先看效果  该效果是RawImage组件下实现。单纯Shader实现,不用c#辅助,当然,肯定也有缺点,在一些场合下或许不适用,我也希望能最大化适用,奈何技术有限。网上看过一些实现有些只适合3D,并且不适合棱角的,有些适用UI,效果也不错,但是为了泛光范围加大,性能指数

    2024年02月12日
    浏览(46)
  • 【实现100个unity特效】shader实现3D物品闪光和描边效果

    线状映射图片 配置,按该shader新增材质 Outline Width控制描边 Line Speed控制闪光速度 当然,还可以修改对应的颜色 效果演示 赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的 点赞评论和关注 ,以便我第一时间收到反馈,你的每一次 支持 都是我不断创作的最

    2024年01月25日
    浏览(60)
  • Unity UGUI的Outline(描边实现事务的原子性)组件的介绍及使用

    Outline(描边)组件是Unity UGUI中的一种特效组件,用于给UI元素添加描边效果。通过设置描边的颜色、宽度和模糊程度,可以使UI元素在视觉上更加突出。 Outline(描边)组件通过在UI元素周围绘制多个相同的UI元素,并设置不同的颜色和大小,从而实现描边的效果。描边的宽度和模糊

    2024年02月22日
    浏览(56)
  • Unity文字描边

    思路: 寻找边界点,均值平滑: Shader “UI-Effect/ImgOutline” { Properties { // [NoScaleOffset] _MainTex (“Main Texture”, 2D) = “black” {} }

    2024年02月12日
    浏览(44)
  • Unity 2D外描边Shader

    今天,我们来实现一个2D外描边的效果。外描边:即在边缘透明像素周围加上一层描边,不占用原来的像素。 思路:我们可以在片元着色器实现此效果,当一个像素本身不是透明的(alpha0),那么让它返回自身的颜色;当一个像素本身是透明的,并且它上下左右4个像素的al

    2024年02月04日
    浏览(45)
  • 【Unity】TextMeshPro描边功能

    有的小伙伴第一次使用TextMeshPro的时候,会找不到TextMeshPro的描边功能,对此,我来简单的讲述一下。

    2024年03月12日
    浏览(62)
  • UNITY 基础之 实现动态加载网络端、PC端和 ANDROID 端指定路径下的图片的简单方法

    Unity中的一些基础知识点,便于后期查看学习。 本节介绍,如何动态加载网络上,电脑上或者Android手机上指定路径的图片的简单方式,方法不唯一,仅供参考。 1、UnityWebRequest 发起网络请求,DownloadHandlerTexture 作为发起下载图片,解析得到图片 2、下载地址不仅支持网络路径

    2024年02月09日
    浏览(36)
  • Unity TextMeshPro使用技巧-添加描边渐变色

    需要修改描边颜色,先以为要去改源码,后面发现TextmeshPro(后面叫Tmp)本来就支持, 选择这个shader,然后添加描边的渐变色图,这样描边也可以显示多种颜色了,下面的Thickness调整的是描边清晰度

    2024年02月16日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包