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;
}
}
}
详细解决方案
[转载]Unity3d闪耀灯光脚本
热度:115 发布时间:2012-11-23 00:03:43.0
相关解决方案
- 怎么用 svn 管理 unity3d 项目
- Unity3d Webplayer 障蔽缓存机制
- Unity3d 鼠标捡取 javascript
- unity3d ios开发 调试的流程?该怎么处理
- unity3d ios开发 调试的流程?解决思路
- (转)unity3D iPhone开发有关问题汇总
- Unity3D 搬动平台实现一种大规模(其实跟PC比还是算小规模)动画角色渲染的方案-绝对原创方案。
- Unity3d 播发高质量视频解决方案
- Unity3D 怎么在安卓手机上播放视频
- Android Unity3d 腾挪脚本
- unity3D C#容易代理使用了解
- Delegates, Events and Singletons with Unity3D – C
- UNITY3D c#脚本中处置类与结构体的区别
- Unity3D Android文件浏览器
- Unity3D Shader 入门第一天
- Unity3D 动态加载本地/网络GLB模型
- Unity3D 使用一个AudioSource同时播放背景音乐和按键音效
- Unity3D 如何干净的解除父子关系
- [Unity3D]什么是Apply Root Motion?什么是Bake into Pose?
- Unity3d 中 PlayerPrefs 保存数据的总结
- Unity3D 调用其他函数方法的三种方式
- Unity3D 第一人称相机旋转限制技巧
- Unity3d 的 EditorUtility类的简单说明
- Unity3D 文字线条效果
- Unity3D: 动态加载Prefab
- unity3d VR___________通过移动和旋转父物体,来使子物体始终在指定的位置上并且保持指定的角度
- [学习笔记] Unity3D 某些常用类
- [学习笔记]Unity3D 5 引擎------关节(Joint)
- 【转】Unity3d 赛车车辆各类性能算法
- Unity3d 连接MySQL数据库测试成功