2021-01-06 11:34发布
首先是给UI对象添加Canvas Group组件
通过控制Alpha改变其透明度来控制显示和隐藏(Alpha=0隐藏;Alpha=1显示)(Blocks Raycasts=true可以交互;Blocks Raycasts=false无法交互)然后敲代码就可以了哈。
将代码复制过去,放在物件上面,然后进行测试。
直接贴出代码:
using UnityEngine; using System.Collections; [RequireComponent( typeof( Light ) )] public class flickeringLight : MonoBehaviour { // Flickering Styles public enum flickerinLightStyles { CampFire = 0, Fluorescent = 1 }; public flickerinLightStyles flickeringLightStyle = flickerinLightStyles.CampFire; // Campfire Methods public enum campfireMethods { Intensity = 0, Range = 1, Both = 2 }; public campfireMethods campfireMethod = campfireMethods.Intensity; // Intensity Styles public enum campfireIntesityStyles { Sine = 0, Random = 1 }; public campfireIntesityStyles campfireIntesityStyle = campfireIntesityStyles.Random; // Range Styles public enum campfireRangeStyles { Sine = 0, Random = 1 }; public campfireRangeStyles campfireRangeStyle = campfireRangeStyles.Random; // Base Intensity Value public float CampfireIntensityBaseValue = 0.5f; // Intensity Flickering Power public float CampfireIntensityFlickerValue = 0.1f; // Base Range Value public float CampfireRangeBaseValue = 10.0f; // Range Flickering Power public float CampfireRangeFlickerValue = 2.0f; // If Style is Sine private float CampfireSineCycleIntensity = 0.0f; private float CampfireSineCycleRange = 0.0f; // "Glow" Speeds public float CampfireSineCycleIntensitySpeed = 5.0f; public float CampfireSineCycleRangeSpeed = 5.0f; public float FluorescentFlickerMin = 0.4f; public float FluorescentFlickerMax = 0.5f; public float FluorescentFlicerPercent = 0.95f; // NOT IMPLEMENTED YET !!!! public bool FluorescentFlickerPlaySound = false; public AudioClip FluorescentFlickerAudioClip; // ------------------------ // Use this for initialization void Start () { } // Update is called once per frame void Update () { switch( flickeringLightStyle ) { // If Flickering Style is Campfire case flickerinLightStyles.CampFire: // If campfire method is Intesity OR Both if( campfireMethod == campfireMethods.Intensity || campfireMethod == campfireMethods.Both ) { // If Intensity style is Sine if( campfireIntesityStyle == campfireIntesityStyles.Sine ) { // Cycle the Campfire angle CampfireSineCycleIntensity += CampfireSineCycleIntensitySpeed; if( CampfireSineCycleIntensity > 360.0f ) CampfireSineCycleIntensity = 0.0f; // Base + Values light.intensity = CampfireIntensityBaseValue + ( ( Mathf.Sin( CampfireSineCycleIntensity * Mathf.Deg2Rad ) * ( CampfireIntensityFlickerValue / 2.0f ) ) + ( CampfireIntensityFlickerValue / 2.0f ) ); } else light.intensity = CampfireIntensityBaseValue + Random.Range( 0.0f, CampfireIntensityFlickerValue ); } // If campfire method is Range OR Both if( campfireMethod == campfireMethods.Range || campfireMethod == campfireMethods.Both ) { // If Range style is Sine if( campfireRangeStyle == campfireRangeStyles.Sine ) { // Cycle the Campfire angle CampfireSineCycleRange += CampfireSineCycleRangeSpeed; if( CampfireSineCycleRange > 360.0f ) CampfireSineCycleRange = 0.0f; // Base + Values light.range = CampfireRangeBaseValue + ( ( Mathf.Sin( CampfireSineCycleRange * Mathf.Deg2Rad ) * ( CampfireSineCycleRange / 2.0f ) ) + ( CampfireSineCycleRange / 2.0f ) ); } else light.range = CampfireRangeBaseValue + Random.Range( 0.0f, CampfireRangeFlickerValue ); } break; // If Flickering Style is Fluorescent case flickerinLightStyles.Fluorescent: if( Random.Range( 0.0f, 1.0f ) > FluorescentFlicerPercent ) { light.intensity = FluorescentFlickerMin; // Check Audio - NOT IMPLEMENTED YET if( FluorescentFlickerPlaySound ) { } } else light.intensity = FluorescentFlickerMax; break; default: // You should not be here. break; } } }
OK,自己测试一下吧。
通过控制Alpha改变其透明度来控制显示和隐藏(Alpha=0隐藏;Alpha=1显示)(Blocks Raycasts=true可以交互;Blocks Raycasts=false无法交互)
剩下的没什么特殊点,直接一套代码
挂在脚本
然后实现
原理比较简单,通过代码开启材质的自发光效果,然后不断地调整自发光的亮度即可。首先要获取到材质对象实例 material,然后通过其进行其他操作:
启用自发光效果的代码是 material.EnableKeyword("_EMISSION")
material.EnableKeyword("_EMISSION")
关闭自发光效果的代码是 material.DisableKeyword("_EMISSION")
material.DisableKeyword("_EMISSION")
设置自发光颜色和亮度的代码是 material.SetColor("_EmissionColor", Color.HSVToRGB(_h, _s, _v))
material.SetColor("_EmissionColor", Color.HSVToRGB(_h, _s, _v))
其中的 _h、_s、_v参数分别代表颜色的色相、饱和度和亮度。
获取颜色的色相、饱和度和亮度的代码为 Color.RGBToHSV(color, out _h, out _s, out _v)
Color.RGBToHSV(color, out _h, out _s, out _v)
下面有完整的源代码
此方法实现的闪烁效果不能发出光晕,因为自发光的光晕必须经过烘焙才能生效,而烘焙是在运行前完成的,所以无法在运行时产生光晕效果;另外闪烁的最高亮度只能为1,不能像烘焙时那样将亮度设为大于1而产生HDR效果。
using System.Collections;using UnityEngine;public class Glinting : MonoBehaviour { /// /// 闪烁颜色 /// public Color color = new Color(1, 0, 1, 1); /// /// 最低发光亮度,取值范围[0,1],需小于最高发光亮度。 /// [Range(0.0f, 1.0f)] public float minBrightness = 0.0f; /// /// 最高发光亮度,取值范围[0,1],需大于最低发光亮度。 /// [Range(0.0f, 1)] public float maxBrightness = 0.5f; /// /// 闪烁频率,取值范围[0.2,30.0]。 /// [Range(0.2f, 30.0f)] public float rate = 1; [Tooltip("勾选此项则启动时自动开始闪烁")] [SerializeField] private bool _autoStart = false; private float _h, _s, _v; // 色调,饱和度,亮度 private float _deltaBrightness; // 最低最高亮度差 private Renderer _renderer; private Material _material; private readonly string _keyword = "_EMISSION"; private readonly string _colorName = "_EmissionColor"; private Coroutine _glinting; private void Start() { _renderer = gameObject.GetComponent(); _material = _renderer.material; if (_autoStart) { StartGlinting(); } } /// /// 校验数据,并保证运行时的修改能够得到应用。 /// 该方法只在编辑器模式中生效!!! /// private void OnValidate() { // 限制亮度范围 if (minBrightness < 0 || minBrightness > 1) { minBrightness = 0.0f; Debug.LogError("最低亮度超出取值范围[0, 1],已重置为0。"); } if (maxBrightness < 0 || maxBrightness > 1) { maxBrightness = 1.0f; Debug.LogError("最高亮度超出取值范围[0, 1],已重置为1。"); } if (minBrightness >= maxBrightness) { minBrightness = 0.0f; maxBrightness = 1.0f; Debug.LogError("最低亮度[MinBrightness]必须低于最高亮度[MaxBrightness],已分别重置为0/1!"); } // 限制闪烁频率 if (rate < 0.2f || rate > 30.0f) { rate = 1; Debug.LogError("闪烁频率超出取值范围[0.2, 30.0],已重置为1.0。"); } // 更新亮度差 _deltaBrightness = maxBrightness - minBrightness; // 更新颜色 // 注意不能使用 _v ,否则在运行时修改参数会导致亮度突变 float tempV = 0; Color.RGBToHSV(color, out _h, out _s, out tempV); } /// /// 开始闪烁。 /// public void StartGlinting() { _material.EnableKeyword(_keyword); if (_glinting != null) { StopCoroutine(_glinting); } _glinting = StartCoroutine(IEGlinting()); } /// /// 停止闪烁。 /// public void StopGlinting() { _material.DisableKeyword(_keyword); if (_glinting != null) { StopCoroutine(_glinting); } } /// /// 控制自发光强度。 /// /// private IEnumerator IEGlinting() { Color.RGBToHSV(color, out _h, out _s, out _v); _v = minBrightness; _deltaBrightness = maxBrightness - minBrightness; bool increase = true; while (true) { if (increase) { _v += _deltaBrightness * Time.deltaTime * rate; increase = _v <= maxBrightness; } else { _v -= _deltaBrightness * Time.deltaTime * rate; increase = _v <= minBrightness; } _material.SetColor(_colorName, Color.HSVToRGB(_h, _s, _v)); //_renderer.UpdateGIMaterials(); yield return null; } } }
using UnityEngine;using System.Collections;using UnityEngine.UI;public class ShanShuoAnim : MonoBehaviour {private float alpha = 0.2f;private float alphaSpeed = 8f;private bool isShow = true;//用来控制闪烁的内容private CanvasGroup cg;private bool isClick = false;//用来控制 彻底不需要走动画了private Image shanImg;public Sprite shan_sprite; //外部传进来的void Start(){cg = this.transform.GetComponent();shanImg = this.transform.GetComponent();}void Update(){if (isClick){if (isShow){if (alpha != cg.alpha){cg.alpha = Mathf.Lerp(cg.alpha, alpha, alphaSpeed * Time.deltaTime); //这个方法表示的是一种简便过程 传入初始和想达到的if (Mathf.Abs(alpha - cg.alpha) <= 0.01){//Debug.Log("更新2===" + alpha + "===" + cg.alpha);cg.alpha = alpha; isShow = false;}}}else{if (1 != cg.alpha){cg.alpha = Mathf.Lerp(cg.alpha, 1, alphaSpeed * Time.deltaTime); //这个方法表示的是一种简便过程 传入初始和想达到的if (Mathf.Abs(1 - cg.alpha) <= 0.01){//Debug.Log("更新3===" + alpha + "===" + cg.alpha);cg.alpha = 1; isShow = true;}}}}}public void ShowAnim(){//alpha = 1;isClick = true;shanImg.sprite = shan_sprite;//cg.blocksRaycasts = true;//可以和该UI对象交互}public void HideAnim(){isClick = false;//alpha = 0;//cg.blocksRaycasts = false;//不可以和该UI对象交互}}
实现!
如果是相同颜色的灯光,使用一个调节该灯光的强度即可。
还是要学好编程基础呀如果你觉得编程很苦难 不一定要从c#开始学 学学js flash as等等 有个梯度就好多了如果要用好unity 不会编程那是不行的 学习的过程中都有个头疼的过程 记住 头越痛 代表你要接受的东西越多 坚持 你的大脑在和知识兼容中:D...
可以先思考学习的目的,是什么因素在驱动你。是完成一款作品?进入某个行业?还是探究某类问题?否则和技术相关的知识浩如烟海,很容易迷失在细枝末节上。而要找到动力源头。个人的经验,就是关注一些和自己同方向,同类型的创作者。他们输出的作品会激励你,...
可以让模型师直接作出这样的形状,如果用纯Unity制作,就要用基本游戏对象拼接了,包括楼梯,城堡,都可以拼接出来。正常情况不会这样做,因为不够精美,都是建模师来实现,毕竟Unity不属于专业的建模软件,侧重于实现功能。...
Shader Unlit/Test{Properties{_MainTex(MainTex,2D)=white{}_MainColor(MainColor,COLOR)=(1,1,1,1)_AddTex(AddTex,2D)=white{}_Maxset(Max,Range(0.1,1.0))=0.1}SubShader{Tags{RenderType=Transparent Queue=Tran...
文章主要为大家详细介绍了Unity Shader实现水波纹效果,文中示例代码介绍的非常详细具体代码实现如下:Shader Custom/shuibowen{ Properties{ _MainTex(Base (RGB),2D)=white{} _distanceFactor(Distancefactor,float)=1 _timeFactor(time factor,float)=...
策划的最基本的原则就是:改进缺点,做别人没有做到的。无论游戏策划还是其它策划都是一样! 游戏策划的第二个原则:放飞思想。也许你认为我是说策划们应该充满想象力,能想一些匪夷所思的东西!对不起。不是这意思!一个合格的策划不是为了发泄自己的...
可以多玩一些其它的游戏,看一些科幻电影等,寻找灵感。
游戏架构与设计不纯粹是一门科学,它不需要提出假设或探究真理,也不被逻辑或正规方法的严格标准所束缚。游戏的目的就是通过玩来获得娱乐,因此游戏设计即需要艺术家一样的创造力,也需要工程师一样的精心规划。游戏设计是一门手艺,就像好莱坞的电影摄像或服...
void Update(){ transform.rotation = Quaternion.Euler(Vector3.zero);}可以试一下,保证物体x轴和z轴为0就可以使其一直垂直。
界面左右移动、上下移动。。本质都是:手指滑动。。。可以参考这些:https://www.cnblogs.com/coldcode/p/5362537.htmlhttps://blog.csdn.net/totosj/article/details/80112852https://blog.csdn.net/zcc858079762/article/details/85253120...
首先新建一个C#脚本,命名为MyFollow,然后把以下代码粘贴进去,保存:AخA 1using UnityEngine;2using System.Collections;3public class MyFollow : MonoBehaviour4{5 public float distanceAway = 5; // distance...
安装高通的Vuforia插件即可。
不可以,只能一个工程打一个包。
Edit->Project Settings->Graphics 找到Shader Stripping 中fog mode设置为custom(原来是Automatic),然后选中你想要的模式,最后重新打包就ok
用到的插件:System.Drawing.dllSystem.Windows.Forms.dllSystem.Deployment.dll(运用基于.Net4.x的dll打包时,需要用到该dll,否则会报错)代码如下:using System;using System.Runtime.InteropServices;using UnityEngine;using UnityEngine.UI; p......
如下图,设置为none,然后删掉滑动条就可以了。
最多设置5个标签!
首先是给UI对象添加Canvas Group组件
通过控制Alpha改变其透明度来控制显示和隐藏(Alpha=0隐藏;Alpha=1显示)(Blocks Raycasts=true可以交互;Blocks Raycasts=false无法交互)然后敲代码就可以了哈。
将代码复制过去,放在物件上面,然后进行测试。
直接贴出代码:
OK,自己测试一下吧。
首先是给UI对象添加Canvas Group组件
通过控制Alpha改变其透明度来控制显示和隐藏(Alpha=0隐藏;Alpha=1显示)(Blocks Raycasts=true可以交互;Blocks Raycasts=false无法交互)
剩下的没什么特殊点,直接一套代码
挂在脚本
然后实现
原理比较简单,通过代码开启材质的自发光效果,然后不断地调整自发光的亮度即可。
首先要获取到材质对象实例 material,然后通过其进行其他操作:
启用自发光效果的代码是
material.EnableKeyword("_EMISSION")
关闭自发光效果的代码是
material.DisableKeyword("_EMISSION")
设置自发光颜色和亮度的代码是
material.SetColor("_EmissionColor", Color.HSVToRGB(_h, _s, _v))
其中的 _h、_s、_v参数分别代表颜色的色相、饱和度和亮度。
获取颜色的色相、饱和度和亮度的代码为
Color.RGBToHSV(color, out _h, out _s, out _v)
下面有完整的源代码
此方法实现的闪烁效果不能发出光晕,因为自发光的光晕必须经过烘焙才能生效,而烘焙是在运行前完成的,所以无法在运行时产生光晕效果;另外闪烁的最高亮度只能为1,不能像烘焙时那样将亮度设为大于1而产生HDR效果。
源代码
首先是给UI对象添加Canvas Group组件
通过控制Alpha改变其透明度来控制显示和隐藏(Alpha=0隐藏;Alpha=1显示)(Blocks Raycasts=true可以交互;Blocks Raycasts=false无法交互)
剩下的没什么特殊点,直接一套代码
using UnityEngine;using System.Collections;using UnityEngine.UI;public class ShanShuoAnim : MonoBehaviour {private float alpha = 0.2f;private float alphaSpeed = 8f;private bool isShow = true;//用来控制闪烁的内容private CanvasGroup cg;private bool isClick = false;//用来控制 彻底不需要走动画了private Image shanImg;public Sprite shan_sprite; //外部传进来的void Start(){cg = this.transform.GetComponent();shanImg = this.transform.GetComponent();}void Update(){if (isClick){if (isShow){if (alpha != cg.alpha){cg.alpha = Mathf.Lerp(cg.alpha, alpha, alphaSpeed * Time.deltaTime); //这个方法表示的是一种简便过程 传入初始和想达到的if (Mathf.Abs(alpha - cg.alpha) <= 0.01){//Debug.Log("更新2===" + alpha + "===" + cg.alpha);cg.alpha = alpha; isShow = false;}}}else{if (1 != cg.alpha){cg.alpha = Mathf.Lerp(cg.alpha, 1, alphaSpeed * Time.deltaTime); //这个方法表示的是一种简便过程 传入初始和想达到的if (Mathf.Abs(1 - cg.alpha) <= 0.01){//Debug.Log("更新3===" + alpha + "===" + cg.alpha);cg.alpha = 1; isShow = true;}}}}}public void ShowAnim(){//alpha = 1;isClick = true;shanImg.sprite = shan_sprite;//cg.blocksRaycasts = true;//可以和该UI对象交互}public void HideAnim(){isClick = false;//alpha = 0;//cg.blocksRaycasts = false;//不可以和该UI对象交互}}
挂在脚本
实现!
首先是给UI对象添加Canvas Group组件
通过控制Alpha改变其透明度来控制显示和隐藏(Alpha=0隐藏;Alpha=1显示)(Blocks Raycasts=true可以交互;Blocks Raycasts=false无法交互)
如果是相同颜色的灯光,使用一个调节该灯光的强度即可。
首先是给UI对象添加Canvas Group组件
通过控制Alpha改变其透明度来控制显示和隐藏(Alpha=0隐藏;Alpha=1显示)(Blocks Raycasts=true可以交互;Blocks Raycasts=false无法交互)
剩下的没什么特殊点,直接一套代码
挂在脚本
然后实现
相关问题推荐
还是要学好编程基础呀如果你觉得编程很苦难 不一定要从c#开始学 学学js flash as等等 有个梯度就好多了如果要用好unity 不会编程那是不行的 学习的过程中都有个头疼的过程 记住 头越痛 代表你要接受的东西越多 坚持 你的大脑在和知识兼容中:D...
可以先思考学习的目的,是什么因素在驱动你。是完成一款作品?进入某个行业?还是探究某类问题?否则和技术相关的知识浩如烟海,很容易迷失在细枝末节上。而要找到动力源头。个人的经验,就是关注一些和自己同方向,同类型的创作者。他们输出的作品会激励你,...
可以让模型师直接作出这样的形状,如果用纯Unity制作,就要用基本游戏对象拼接了,包括楼梯,城堡,都可以拼接出来。正常情况不会这样做,因为不够精美,都是建模师来实现,毕竟Unity不属于专业的建模软件,侧重于实现功能。...
Shader Unlit/Test{Properties{_MainTex(MainTex,2D)=white{}_MainColor(MainColor,COLOR)=(1,1,1,1)_AddTex(AddTex,2D)=white{}_Maxset(Max,Range(0.1,1.0))=0.1}SubShader{Tags{RenderType=Transparent Queue=Tran...
文章主要为大家详细介绍了Unity Shader实现水波纹效果,文中示例代码介绍的非常详细具体代码实现如下:Shader Custom/shuibowen{ Properties{ _MainTex(Base (RGB),2D)=white{} _distanceFactor(Distancefactor,float)=1 _timeFactor(time factor,float)=...
策划的最基本的原则就是:改进缺点,做别人没有做到的。无论游戏策划还是其它策划都是一样! 游戏策划的第二个原则:放飞思想。也许你认为我是说策划们应该充满想象力,能想一些匪夷所思的东西!对不起。不是这意思!一个合格的策划不是为了发泄自己的...
可以多玩一些其它的游戏,看一些科幻电影等,寻找灵感。
游戏架构与设计不纯粹是一门科学,它不需要提出假设或探究真理,也不被逻辑或正规方法的严格标准所束缚。游戏的目的就是通过玩来获得娱乐,因此游戏设计即需要艺术家一样的创造力,也需要工程师一样的精心规划。游戏设计是一门手艺,就像好莱坞的电影摄像或服...
void Update(){ transform.rotation = Quaternion.Euler(Vector3.zero);}可以试一下,保证物体x轴和z轴为0就可以使其一直垂直。
界面左右移动、上下移动。。本质都是:手指滑动。。。可以参考这些:https://www.cnblogs.com/coldcode/p/5362537.htmlhttps://blog.csdn.net/totosj/article/details/80112852https://blog.csdn.net/zcc858079762/article/details/85253120...
首先新建一个C#脚本,命名为MyFollow,然后把以下代码粘贴进去,保存:AخA 1using UnityEngine;2using System.Collections;3public class MyFollow : MonoBehaviour4{5 public float distanceAway = 5; // distance...
安装高通的Vuforia插件即可。
不可以,只能一个工程打一个包。
Edit->Project Settings->Graphics 找到Shader Stripping 中fog mode设置为custom(原来是Automatic),然后选中你想要的模式,最后重新打包就ok
用到的插件:System.Drawing.dllSystem.Windows.Forms.dllSystem.Deployment.dll(运用基于.Net4.x的dll打包时,需要用到该dll,否则会报错)代码如下:using System;using System.Runtime.InteropServices;using UnityEngine;using UnityEngine.UI; p......
如下图,设置为none,然后删掉滑动条就可以了。