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;
}
}
}
}
}
Unity-根据时间开灯与关灯的更多相关文章
- Jquery开灯关灯效果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 30个Python物联网小实验3:使用按钮开灯关灯
使用按钮开灯关灯 接线图非常简单,LED接GPIO17号口,按钮接GPIO2号口,负极接GND地线. 代码也非常简单: from gpiozero import LED, Button from si ...
- 9509 开灯(dfs)
9509 开灯 时间限制:1000MS 内存限制:65535K提交次数:0 通过次数:0 题型: 编程题 语言: G++;GCC Description 有16的开关分别控制16盏灯,开关排列成 ...
- NYOJ 题目77 开灯问题(简单模拟)
开灯问题 时间限制:3000 ms | 内存限制:65535 KB 难度:1 描述 有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2 ...
- 开灯问题—C语言
开灯问题 有n盏灯,编号为1~n.第1个人把所有灯打开,第2个人按下所有编号为2的倍数开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关,以此类推.一共有k个人,问最后哪些灯是开着?输入n和 ...
- Java实现 蓝桥杯VIP 算法提高 开灯游戏
算法提高 开灯游戏 时间限制:1.0s 内存限制:256.0MB 问题描述 有9盏灯与9个开关,编号都是1~9. 每个开关能控制若干盏灯,按下一次会改变其控制的灯的状态(亮的变成不亮,不亮变成亮的). ...
- c语言实现开灯问题
开灯问题: 有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2 的倍数的开关(这些灯将被关掉),第3 个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依 ...
- 洛谷 P1876 开灯(思维,枚举,规律题)
P1876 开灯 题目背景 该题的题目是不是感到很眼熟呢? 事实上,如果你懂的方法,该题的代码简直不能再短. 但是如果你不懂得呢?那...(自己去想) 题目描述 首先所有的灯都是关的(注意是关!),编 ...
- 【Luogu1876】开灯(数论)
[Luogu1876]开灯(数论) 题面 题目描述 首先所有的灯都是关的(注意是关!),编号为1的人走过来,把是一的倍数的灯全部打开,编号为二的的把是二的倍数的灯全部关上,编号为3的人又把是三的倍数的 ...
随机推荐
- kvm虚拟化存储管理(3)
一.KVM 存储虚拟化介绍 KVM 的存储虚拟化是通过存储池(Storage Pool)和卷(Volume)来管理的. Storage Pool 是宿主机上可以看到的一片存储空间,可以是多种型: Vo ...
- 浅谈c++(一)
本人为菜鸟一枚,如有错误,欢迎指正. 由于上半年学了C语言,为了更好的过渡到C++,我将在未来展示一下两者的不同以及优缺点.在c++中,不得不谈到类.这是C++中最重要的语法特征.我们可以通过它,定义 ...
- Redis的五大数据类型以及key的相关操作命令
Redis的五大数据类型 redis的数据都是以key/value存储,所以说,五大类型指的是value的数据类型 String 字符串,作为redis的最基本数据类型 redis中的string类型 ...
- 吴恩达-机器学习+Logistic回归分类方案
- SQL Server邮件相关SQL语句出现严重的ASYNC_NETWORK_IO等待事件案例
DPA监控发现一台SQL Server服务器最近两天执行系统存储过程msdb.dbo.sp_MailItemResultSets中的某个SQL时,出现较严重的ASYNC_NETWORK_IO等待. ...
- RabbitMQ与Kafka选型对比
背景 本公司是.Net项目,在.Net可选的MQ比较少,主要Kafka和RabbitMQ,RabbitMQ我也是使用多年了,最近的Kafka广告与流行度打得使我也是无法无视,因此也是花了点时间收集了资 ...
- HashMap,HashSet,HashTable,LinkedHashMap,LinkedHashSet,ArrayList,LinkedList,ConcurrentHashMap,Vector 区别
ConcurrentHashMap是弱一致性,也就是说遍历过程中其他线程可能对链表结构做了调整,因此get和containsKey返回的可能是过时的数据 ConcurrentHashMap是基于分段锁 ...
- 绝了!这款工具让SpringBoot不再需要Controller、Service、DAO、Mapper!
Dataway介绍 Dataway 是基于 DataQL 服务聚合能力,为应用提供的一个接口配置工具,使得使用者无需开发任何代码就配置一个满足需求的接口.整个接口配置.测试.冒烟.发布,一站式都通过 ...
- 一篇文章搞定 Nginx 反向代理与负载均衡
代理 要想弄明白反向代理,首先要知道啥是正向代理,要搞懂正向代理只需要知道啥是代理即可.代理其实就是一个中介,在不同事物或同一事物内部起到居间联系作用的环节.比如买票黄牛,房屋中介等等. 在互联网中代 ...
- Restful 风格是什么?
1.1 什么是RESTful 1. REST与技术无关,代表的是一种软件架构风格(REST是Representational State Transfer的简称,中文翻译为"表征状态转移&q ...