参照 风宇冲Unity3D教程宝典之Shader篇:第四讲制作一个美丽的地球 和 Unity3D教程宝典之Shader篇:第五讲LOGO闪光效果
这两篇文章都是引入时间这一因素,进行shader的移动达到的效果
一、 风宇冲Unity3D教程宝典之Shader篇:第四讲制作一个美丽的地球
Shader "Custom/earth" {
Properties {
_MainTex ("Texture", 2D) = "white" { }
_Cloud ("_Cloud", 2D) = "white" { }
}
SubShader {
Tags{"Queue" = "Transparent" "RenderType"="Transparent"}
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCGcginc"
float4 _Color;
sampler2D _MainTex;
sampler2D _Cloud;
struct v2f {
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
} ;
float4 _MainTex_ST;
v2f vert (appdata_base v)
{
//和之前一样
v2f o;
opos = mul (UNITY_MATRIX_MVP, vvertex);
ouv = TRANSFORM_TEX (vtexcoord, _MainTex);
return o;
}
half4 frag (v2f i) : COLOR
{
//地球的贴图uv, x即横向在动
float u_x = iuvx + -01_Time;
float2 uv_earth=float2( u_x , iuvy);
half4 texcolor_earth = tex2D (_MainTex, uv_earth);
//云层的贴图uv的x也在动,但是动的更快一些
float2 uv_cloud;
u_x = iuvx + -02_Time;
uv_cloud=float2( u_x , iuvy);
half4 tex_cloudDepth = tex2D (_Cloud, uv_cloud);
//纯白 x 深度值= 该点的云颜色
half4 texcolor_cloud = float4(1,1,1,0) (tex_cloudDepthx);
//地球云彩颜色混合
return lerp(texcolor_earth,texcolor_cloud,05f);
}
ENDCG}}}
二、 Unity3D教程宝典之Shader篇:第五讲LOGO闪光效果
Shader "Custom/logo" {
Properties {
//_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
//_Glossiness ("Smoothness", Range(0,1)) = 05
//_Metallic ("Metallic", Range(0,1)) = 00
}
SubShader {
Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
Blend SrcAlpha OneMinusSrcAlpha
AlphaTest Greater 01
pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCGcginc"
sampler2D _MainTex;
float4 _MainTex_ST;
struct v2f {
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
};
//顶点函数没什么特别的,和常规一样
v2f vert (appdata_base v)
{
v2f o;
opos = mul(UNITY_MATRIX_MVP,vvertex);
ouv = TRANSFORM_TEX(vtexcoord,_MainTex);
return o;
}
//必须放在使用其的 frag函数之前,否则无法识别。
//核心:计算函数,角度,uv,光带的x长度,间隔,开始时间,偏移,单次循环时间
float inFlash(float angle,float2 uv,float xLength,int interval,int beginTime, float offX, float loopTime )
{
//亮度值
float brightness =0;
//倾斜角
float angleInRad = 00174444 angle;
//当前时间
float currentTime = _Timey;
//获取本次光照的起始时间
int currentTimeInt = _Timey/interval;
currentTimeInt =interval;
//获取本次光照的流逝时间 = 当前时间 - 起始时间
float currentTimePassed = currentTime -currentTimeInt;
if(currentTimePassed >beginTime)
{
//底部左边界和右边界
float xBottomLeftBound;
float xBottomRightBound;
//此点边界
float xPointLeftBound;
float xPointRightBound;
float x0 = currentTimePassed-beginTime;
x0 /= loopTime;
//设置右边界
xBottomRightBound = x0;
//设置左边界
xBottomLeftBound = x0 - xLength;
//投影至x的长度 = y/ tan(angle)
float xProjL;
xProjL= (uvy)/tan(angleInRad);
//此点的左边界 = 底部左边界 - 投影至x的长度
xPointLeftBound = xBottomLeftBound - xProjL;
//此点的右边界 = 底部右边界 - 投影至x的长度
xPointRightBound = xBottomRightBound - xProjL;
//边界加上一个偏移
xPointLeftBound += offX;
xPointRightBound += offX;
//如果该点在区域内
if(uvx > xPointLeftBound && uvx < xPointRightBound)
{
//得到发光区域的中心点
float midness = (xPointLeftBound + xPointRightBound)/2;
//趋近中心点的程度,0表示位于边缘,1表示位于中心点
float rate= (xLength -2abs(uvx - midness))/ (xLength);
brightness = rate;
}
}
brightness= max(brightness,0);
//返回颜色 = 纯白色 亮度
float4 col = float4(1,1,1,1) brightness;
return brightness;
}
float4 frag (v2f i) : COLOR
{
float4 outp;
//根据uv取得纹理颜色,和常规一样
float4 texCol = tex2D(_MainTex,iuv);
//传进iuv等参数,得到亮度值
float tmpBrightness;
tmpBrightness =inFlash(75,iuv,025,5,2,015,07);
//图像区域,判定设置为 颜色的A > 05,输出为材质颜色+光亮值
if(texColw >05)
outp =texCol+float4(1,1,1,1)tmpBrightness;
//空白区域,判定设置为 颜色的A <=05,输出空白
else
outp =float4(0,0,0,0);
return outp;
}
ENDCG
}
}
}
倒计时就是时间number每一秒减1,可以利用Timetime来记录时间, if( Timetime > LastTime + 10f ) //LastTime是上一次记录的时间,看下行 { LastTime = Timetime; curParkTime--; //时间数int,这个就是屏幕显示的倒计时,要换算成00:00格式显示
倒计时就是时间number每一秒减1,可以利用Timetime来记录时间,
if( Timetime > LastTime + 10f ) //LastTime是上一次记录的时间,看下行
{
LastTime = Timetime;
curParkTime--; //时间数int,这个就是屏幕显示的倒计时,要换算成00:00格式显示
if( curParkTime == 0 )
{
//时间为0时的处理
}
}
这是一种方法,还有一种方法是用yield return new WaitForSeconds(10f);表示1s后,你可以写个协程函数来记录时间
或者你可以用InvokeRepeating()函数,重复执行
有不明白的再问
我记得我回答了啊,不知道为啥没显示,smoothdeltatime 是为了 deltatime(上一帧所花的时间)的幅度起伏太大。比如所deltatime连续几桢所花的时间 : 01, 01, 05 smoothdeltatime可能会是 01, 01, 03明白了吧
开启协程
StartCoroutine(“Cancell”);
IEnumerator Cancell()
{
//秒数自己定
yield return new WaitForSeconds(10f);
CancelInvoke("xxx");
}
没测试,不知道对不对
unity3D基础入门教程
1本部分是你开始Unity的关键。这里将解释Unity的界面,菜单项,使用资源,创建场景,和发布。当你完全阅读了该部分后,你将能够理解Unity是如何工作的,以及如何使其更加有效的工作,和如何将简单的游戏放置在一起
2现在我们开始学习Unity,如果你还没有打开Unity,你可以通过双击位于Application->Unity文件夹中的Unity图标来运行它,当它第一次运行时你将看到如下的场景:Unity运行时的缺省场景,如果你打开过任何实例,你的屏幕会与上图不同有很多需要学习的东西,让我们花费点时间来观察理解上述界面。
我们将介绍每一个接口元素。概要主窗口的每一个部分都被称为视图(View)。在Unity中有多种类型的视图,但是,你不需要同时看见所有的视图。不同的布局模式(Layoutmodes)包含的视图是不同的。
通过单击布局下拉控件来选择不同的布局,该控件位于窗口的右上角。布局模式选择下拉列表现在,单击布局选择,并单击Animation,切换到动画布局(Animationlayout)。还可以从菜单中选择Window->Layouts->Animation来切换。动画布局包含所有的视图,这是昀好的用来介绍它们的方法
3通过视图左上角的名称你可以迅速的分辨这些视图。这些视图是:场景视图(SceneView)-用于放置物体游戏视图(GameView)-表示游戏在运行时的外观层次视图(Hierarchy)-当前场景中的游戏物体的列表工程视图(Project)-显示当前打开工程中所有可用的物体和资源检视视图(Instpector)-显示当前选中物体的细节和属性时间线(Timeline)-用于为当前选中物体创建基本的时间线动画场景视图(SceneView)
4场景视图(SceneView)是一个可交互的沙盘。你将使用它来选择并在场景中定位所有的游戏物体(GameObjects),包括玩家,摄像机,敌人等。在场景视图中 *** 纵并修改物体是Unity非常重要的功能。这是昀好的通过设计者而不是玩家的角度来查看场景的方法。在场景视图中你可以随意移动并 *** 纵物体,但是你应该知道一些基本的命令以便有效的使用场景视图。
第一个你应该知道命令是FrameSelected命令。这个命令将居中显示你当前选中的物体。你可以在层次视图(Hierarchy)单击任何物体,然后移动你的鼠标到场景视图上并按F键。场景视图将移动以居中显示当前选择的物体。这个命令是非常有用的,你将在场景编辑的时候经常使用它。在场景视图中 *** 作在场景视图的上方有一个包含布局模式选择的工具栏
5尽管现在的工具栏没有附着在场景视图窗口上,但是位于左侧的四个按钮可用来在场景视图中导航并 *** 纵物体,中间的两个用来控制选中的物体轴心如何显示。左边的第一个ViewTool将在以后说明。后面的工具为 *** 纵工具(ManipulationTools),中间的两个为手柄位置工具(HandlePositionTool)选中任何 *** 纵工具可允许你交互时的移动,旋转或缩放物体。当你已经选择了一个工具时你可以在场景视图中单击任何一个物体选中它,现在按下F键使得该物体居中显示。
6当选中一个物体时你将看到Gizmo坐标,每个工具有不同的Gizmo坐标形式,平移旋转缩放。
7点击并拖动当前Gizmo坐标的任何一个坐标轴以便平移,旋转或缩放当前选中物体的变换(Transform)组件。你也可以通过单击并拖动Gizmo坐标的中心来在多个轴上 *** 纵物体。如果你有一个三键的鼠标,你可以通过单击中键来调整昀后调整的轴而不用直接点击它。
8参考变换组件(TransformComponent)部分获取更多内容。手柄位置工具(HandlePositionTool)用来控制物体或一组选中的物体的轴心如何和在哪里显示。选择中心(Center)意味着使用当前所选所有物体的共同轴心,选择轴心(Pivot)意味着将使用各个物体的实际轴心手柄位置设置为中心,使用物体的共同轴心手柄位置设置为轴心,使用实际的物体轴心。
9在场景视图中导航根据使用的鼠标的不同,有很多不同的方式可以在场景视图中导航。使用三键鼠标按住Option按钮并拖动鼠标左键可以使用旋转模式(Orbitmode)按住Option按钮并拖动鼠标中键可以使用拖动模式(Dragmode)按住Option按钮并拖动鼠标右键可以使用缩放模式(Zoommode)。也可以使用滚轮来缩放(略)视图工具模式视图工具的拖动模式快捷键Q。
10在拖动模式(DragMode)下,在场景视图中单击并拖动鼠标来上下左右移动视图。旋转(Orbit)和缩放(ZoomModes)模式也是昀常用的视图工具。保持视图工具选中并按住Option键即可进入旋转模式。单击并拖动鼠标,可以看到视图是如何旋转的。同时注意视图工具按钮从手型变成了眼睛。
11你可以通过按下Command按钮进入缩放模式。在这种模式下,单击并拖动鼠标将前后缩放你的视图。注意缩放模式的图标是一个放大镜。
以上就是关于unity 随时间变化的shader(20170301)全部的内容,包括:unity 随时间变化的shader(20170301)、如何给 unity3d游戏添加计时器、我想问一下unity怎么实现倒计时 当时间为0的时候判定失败等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)