Unity-根据时间开灯与关灯
声明:本人只是学生,并且只是自学Unity,如有大神,不喜勿喷,不足之处,请指出!
本项目使用了UniStorm 3.0(天气)插件,时间也是调用它本身的API,实际并不影响,用系统的时间的是也是可以的
打开自己建立的Unity项目
找个灯的模型拖到场景中去
给灯模型添加Component,搜索Light
这种Light添加方式默认就是居中的,我觉得不适合这种长的灯管,其他加Light方式在下面
另种Add Light方式
这种方式就比较好,可以调整灯泡的位置
脚本出场了
建立一个C#脚本,我就随便加在模型的文件夹里,演示我就随便加了,该规范还是要规范,不规范很难找到文件的,命名为MyLight,双击MyLight脚本打开VS(可能有的人的代码编辑器不一样,实际差不多)
代码-变量
既然要做时间,那么就得考虑开灯与关灯,什么时候开灯什么时候关灯,所以声明了OpenLightTime 与
OffLightTime变量,根据小时(24小时)来判断,所以变量我就用了Int类型,其余的float类型,
public开头 就可以在Unity里面调整参数了
我为什么不写在Update里面而是写在FixedUpdate里呢?网上的大神已经说的很明白了,我就不说了
//开灯时间
public int OpenLightTime = 18;
//关灯时间
public int OffLightTime = 6;
//开灯后最大亮度
public float LightIntensity = 5f;
//开灯与关灯速度
public float OpenAndOffSpeed = 0.01f;
代码-判断
UniStormSystem.Instance.Hour 是UiSotrm插件返回当前时间的一段代码,不用插件的话可以调用系统时间来做
if(gameObject.GetComponent<Light>())
{
//如果挂载脚本的游戏对象有Light组件就执行这里的方法
if (UniStormSystem.Instance.Hour >= OffLightTime && UniStormSystem.Instance.Hour <= OpenLightTime - 1)
{
//判断时间是否处于关灯的时间内
if (gameObject.GetComponent<Light>().intensity >= 0)
{
//判断Light亮度是否小于等于0
gameObject.GetComponent<Light>().intensity -= OpenAndOffSpeed;
//这里-=OpenAndOffSpeed 作用是让灯有过渡的亮度,不会一下子就关
}
}
else
{
//如果时间不处于关灯的时间段,则执行这里的方法
if (gameObject.GetComponent<Light>().intensity < LightIntensity)
{
//判断组件亮度是否小于LightIntensity,小于就执行这里的方法
gameObject.GetComponent<Light>().intensity += OpenAndOffSpeed;
//这里+=OpenAndOffSpeed 作用是让灯有过渡的亮度,不会一下子就开
}
}
}else if(gameObject.transform.Find("Point Light1") || !gameObject.transform.Find("Point Light2") || !gameObject.transform.Find("Point Light3"))
//否则判断游戏对象的子节点是否含有Point Light名称,如有则执行这里的方法,和上面的逻辑一样,就不重复解释了
{
if (UniStormSystem.Instance.Hour >= OffLightTime && UniStormSystem.Instance.Hour <= OpenLightTime - 1)
{
if (gameObject.transform.Find("Point Light1").GetComponent<Light>().intensity >= 0)
{
gameObject.transform.Find("Point Light1").GetComponent<Light>().intensity -= OpenAndOffSpeed;
gameObject.transform.Find("Point Light2").GetComponent<Light>().intensity -= OpenAndOffSpeed;
gameObject.transform.Find("Point Light3").GetComponent<Light>().intensity -= OpenAndOffSpeed;
}
}
else
{
if (gameObject.transform.Find("Point Light1").GetComponent<Light>().intensity < LightIntensity)
{
gameObject.transform.Find("Point Light1").GetComponent<Light>().intensity += OpenAndOffSpeed;
gameObject.transform.Find("Point Light2").GetComponent<Light>().intensity += OpenAndOffSpeed;
gameObject.transform.Find("Point Light3").GetComponent<Light>().intensity += OpenAndOffSpeed;
}
}
}
Unity-运行场景效果
早上6点关灯
晚上18点开灯
完整代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TimeToLight : MonoBehaviour
{
public int OpenLightTime = 18;
public int OffLightTime = 6;
public float LightIntensity = 5f;
public float OpenAndOffSpeed = 0.01f;
private void FixedUpdate()
{
if(gameObject.GetComponent<Light>())
{
if (UniStormSystem.Instance.Hour >= OffLightTime && UniStormSystem.Instance.Hour <= OpenLightTime - 1)
{
if (gameObject.GetComponent<Light>().intensity >= 0)
{
gameObject.GetComponent<Light>().intensity -= OpenAndOffSpeed;
}
}
else
{
if (gameObject.GetComponent<Light>().intensity < LightIntensity)
{
gameObject.GetComponent<Light>().intensity += OpenAndOffSpeed;
}
}
}else if(gameObject.transform.Find("Point Light1") || !gameObject.transform.Find("Point Light2") || !gameObject.transform.Find("Point Light3"))
{
if (UniStormSystem.Instance.Hour >= OffLightTime && UniStormSystem.Instance.Hour <= OpenLightTime - 1)
{
if (gameObject.transform.Find("Point Light1").GetComponent<Light>().intensity >= 0)
{
gameObject.transform.Find("Point Light1").GetComponent<Light>().intensity -= OpenAndOffSpeed;
gameObject.transform.Find("Point Light2").GetComponent<Light>().intensity -= OpenAndOffSpeed;
gameObject.transform.Find("Point Light3").GetComponent<Light>().intensity -= OpenAndOffSpeed;
}
}
else
{
if (gameObject.transform.Find("Point Light1").GetComponent<Light>().intensity < LightIntensity)
{
gameObject.transform.Find("Point Light1").GetComponent<Light>().intensity += OpenAndOffSpeed;
gameObject.transform.Find("Point Light2").GetComponent<Light>().intensity += OpenAndOffSpeed;
gameObject.transform.Find("Point Light3").GetComponent<Light>().intensity += OpenAndOffSpeed;
}
}
}
}
}