声明:本人只是学生,并且只是自学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;
}
}
} }
}

Unity-根据时间开灯与关灯的更多相关文章

  1. Jquery开灯关灯效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. 30个Python物联网小实验3:使用按钮开灯关灯

    使用按钮开灯关灯 接线图非常简单,LED接GPIO17号口,按钮接GPIO2号口,负极接GND地线. 代码也非常简单: from gpiozero import LED, Button from si ...

  3. 9509 开灯(dfs)

    9509 开灯 时间限制:1000MS  内存限制:65535K提交次数:0 通过次数:0 题型: 编程题   语言: G++;GCC Description 有16的开关分别控制16盏灯,开关排列成 ...

  4. NYOJ 题目77 开灯问题(简单模拟)

    开灯问题 时间限制:3000 ms  |            内存限制:65535 KB 难度:1           描述 有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2 ...

  5. 开灯问题—C语言

    开灯问题 有n盏灯,编号为1~n.第1个人把所有灯打开,第2个人按下所有编号为2的倍数开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关,以此类推.一共有k个人,问最后哪些灯是开着?输入n和 ...

  6. Java实现 蓝桥杯VIP 算法提高 开灯游戏

    算法提高 开灯游戏 时间限制:1.0s 内存限制:256.0MB 问题描述 有9盏灯与9个开关,编号都是1~9. 每个开关能控制若干盏灯,按下一次会改变其控制的灯的状态(亮的变成不亮,不亮变成亮的). ...

  7. c语言实现开灯问题

    开灯问题: 有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2 的倍数的开关(这些灯将被关掉),第3 个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依 ...

  8. 洛谷 P1876 开灯(思维,枚举,规律题)

    P1876 开灯 题目背景 该题的题目是不是感到很眼熟呢? 事实上,如果你懂的方法,该题的代码简直不能再短. 但是如果你不懂得呢?那...(自己去想) 题目描述 首先所有的灯都是关的(注意是关!),编 ...

  9. 【Luogu1876】开灯(数论)

    [Luogu1876]开灯(数论) 题面 题目描述 首先所有的灯都是关的(注意是关!),编号为1的人走过来,把是一的倍数的灯全部打开,编号为二的的把是二的倍数的灯全部关上,编号为3的人又把是三的倍数的 ...

随机推荐

  1. C#开发PACS医学影像处理系统(十七):2D处理之影像旋转和翻转

    1.任意角度旋转 在XAML设计器中,设置RotateTransform属性 <InkCanvas x:Name="ToolInkCanvas" UseCustomCurso ...

  2. x86-TSO : 适用于x86体系架构并发编程的内存模型

    Abstract : 如今大数据,云计算,分布式系统等对算力要求高的方向如火如荼.提升计算机算力的一个低成本方法是增加CPU核心,而不是提高单个硬件工作效率. 这就要求软件开发者们能准确,熟悉地运用高 ...

  3. 关于python中break与continue的区别

    在python中break和continue都有跳出循环体的作用,但是他们还是有一些区别的,具体区别如下: break:是直接跳出循环,跳出自己所处的整个循环体 continue:只是跳出本次循环,而 ...

  4. 2.2 spring5源码 -- ioc加载的整体流程

    之前我们知道了spring ioc的加载过程, 具体如下图. 下面我们就来对照下图, 看看ioc加载的源代码. 下面在用装修类比, 看看个个组件都是怎么工作的. 接下来是源码分析的整体结构图. 对照上 ...

  5. 刷题[RCTF 2019]Nextphp

    前置知识 一些关于php7.4版本需知: 1.FFI扩展:ffi.cdef 其中还有这样一段话 如果ffi.cdef没有第二个参数,会在全局查找,第一个参数所声明的符号.意思就是其在不传入第二个参数时 ...

  6. windows提权之mimikatz

    mimikatz privilege::debug #提权命令 sekurlsa::logonPasswords #抓取密码 winmine::infos #扫雷作弊 lsadump::lsa /pa ...

  7. 系统模块sys的常用方法

    sys.argv参数 sys.argv  等价于是一个列表,argv[0] 代表当前脚本程序路径名,可以通过在外部获取多个参数传递给脚本程序执行,按照列表的取值方式第二个数据就是sys.argv[1] ...

  8. android.widget.TextView.setText() on a null object reference

    错误描述 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView. ...

  9. [iTyran原创]iPhone中OpenGL ES显示3DS MAX模型之二:lib3ds加载模型

    [iTyran原创]iPhone中OpenGL ES显示3DS MAX模型之二:lib3ds加载模型 作者:u0u0 - iTyran 在上一节中,我们分析了OBJ格式.OBJ格式优点是文本形式,可读 ...

  10. 《C++primerplus》第9章练习题

    1.(未使用原书例题)练习多文件组织.在一个头文件中定义一种学生的结构体,存储姓名和年龄,声明三个函数分别用于询问有多少个学生,输入学生的信息和展示学生的信息.在另一个源文件中给出所有函数的定义.在主 ...