美文网首页
Unity实现刀塔传奇大招效果

Unity实现刀塔传奇大招效果

作者: 落九天1028 | 来源:发表于2019-07-28 19:34 被阅读0次

首先你要有两个Camera,一个是场景相机,一个是特效相机。

场景相机的Culling Mask设置为Player或Backgroud等等,它负责显示角色和特效等所有和场景相关的对象。

特效相机的Culling Mask设置为Effect,它只负责显示要高亮的部分,无大招时它并不显示任何对象。

在释放大招时,动态将Player和其他要高亮的对象(如特效)的Layer设置为Effect层, 这时特效相机就可以看到这些对象了,而场景相机无法看到这些物体了。最后是对场景相机作压暗后处理, 其他对象和背景就变暗了!大招结束将这些处于高亮层的对象还原致原来的层中。

效果:

具体如何对场景对象作压暗处理呢?

1.创建一个ScreenFade.shader

2.新建一个ScreenFade.cs ,将其挂到场景相机上,在释放大招时开启。

大致表现是:持续5秒0.8alpha的变暗效果,5秒后会在2秒内渐隐消失回到正常。具体时长应该是你的大招时长!

Shader "Unlit/ScreenFade"

{

Properties{

_Color("Color", Color) = (0,0,0,1)

}

SubShader{

Tags{ "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Opaque" }

LOD 100

ZWrite Off

Blend SrcAlpha OneMinusSrcAlpha

Color[_Color]

Pass{}

}

}

using UnityEngine;

using System.Collections;

public class ScreenFade : MonoBehaviour

{

public float lastTime = 5.0f;

public float fadeTime = 2.0f;

public Color fadeColor = new Color(0.01f, 0.01f, 0.01f, 1.0f);

private Material fadeMaterial = null;

private bool isFading = false;

private YieldInstruction fadeInstruction = new WaitForEndOfFrame();

void Awake()

{

fadeMaterial = new Material(Shader.Find("Unlit/ScreenFade"));

}

void OnEnable()

{

StartCoroutine(FadeIn());

}

void OnLevelWasLoaded(int level)

{

StartCoroutine(FadeIn());

}

void OnDestroy()

{

if (fadeMaterial != null)

{

Destroy(fadeMaterial);

}

}

IEnumerator FadeIn()

{

float elapsedTime = 0.0f;

fadeMaterial.color = fadeColor;

Color color = fadeColor;

isFading = true;

while (elapsedTime < lastTime)

{

yield return fadeInstruction;

elapsedTime += Time.deltaTime;

color.a = 0.8f;

fadeMaterial.color = color;

}

elapsedTime -= lastTime;

while (elapsedTime < fadeTime)

{

yield return fadeInstruction;

elapsedTime += Time.deltaTime;

color.a = color.a - Mathf.Clamp01(elapsedTime / fadeTime);

fadeMaterial.color = color;

}

isFading = false;

}

void OnPostRender()

{

if (isFading)

{

fadeMaterial.SetPass(0);

GL.PushMatrix();

GL.LoadOrtho();

GL.Color(fadeMaterial.color);

GL.Begin(GL.QUADS);

GL.Vertex3(0f, 0f, -12f);

GL.Vertex3(0f, 1f, -12f);

GL.Vertex3(1f, 1f, -12f);

GL.Vertex3(1f, 0f, -12f);

GL.End();

GL.PopMatrix();

}

}

}

相关文章

  • Unity实现刀塔传奇大招效果

    首先你要有两个Camera,一个是场景相机,一个是特效相机。 场景相机的Culling Mask设置为Player...

  • 刀塔传奇

    优点: 1.玩法创新,有互动,拼人品(重复尝试某一关,某个技能放对了可能就赢了),重策略(英雄技能搭配)。 2.投...

  • 缷载刀塔传奇

    把会长交给别人 退会 缷载 松了口气

  • Unity实现震动效果

    一、Unity中提供了震动的接口:Handheld.Vibrate(); Unity提供的这个接口的震动时长是0....

  • 体积的使用 后处理 MotionBlur (运动模糊)

    简介: Unity 中动态模糊(MotionBlur)的效果常规情况下是使用后处理来实现的版本:Unity2019...

  • Unity旋转和缩放02-控制摄像机

    Unity旋转和缩放01-控制模型自身 PC端:控制摄像机,围绕模型旋转实现旋转效果、与模型的距离实现缩放效果。功...

  • 2020-09-27 Unity实现图片扫光

    打开Unity,新建一个空工程,导入中一张图片,具体如下图Unity Shader教程之 UGUI扫光效果的实现U...

  • 刀塔 刀塔

    刀塔 刀塔 你的口中总是它 仿佛那才是你的恋人呀 刀塔 刀塔 它真的是我们感情的阻碍吗? 还是 你不讲真话 刀塔 ...

  • 刀塔,刀塔

    杭州烈日炎炎,四号大街两旁的牡丹花树的树叶蜷缩着身子,印着大篇幅男性健康医院广告的143号公交车路过街角的站牌,丢...

  • Unity弹弓效果初步实现

    (一)开头 如何实现类似愤怒的小鸟中弹弓将小鸟打出去的效果呢,这里要用到Unity中的Spring Joint 2...

网友评论

      本文标题:Unity实现刀塔传奇大招效果

      本文链接:https://www.haomeiwen.com/subject/qmwprctx.html