您好,欢迎来到Unity之家!   unity.jb51.net 
  • 首 页
  • 你问我答
  • 当前位置:首页 > 学习培训 > Unity编程 >
    闪烁灯光脚本
    时间:2015-03-28 09:14 来源:Unity之家 作者:unity.jb51.net 浏览:收藏 挑错 推荐 打印



    在这里代码比较多。直接为大家贴出代码了


    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;
    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;
    }
    }
    }


    直接拷贝过去。赶快测试下吧



    (责任编辑:脚印)
    免责声明:Unity之家部分内容来源于互联网,如有侵权,请联系我们,本站将立即进行处理。