Unity-根据时间开灯与关灯
2024-08-24 21:43:40
声明:本人只是学生,并且只是自学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;
}
}
}
}
}
最新文章
- [ASP.NET]配置使用SQL Server保存会话状态
- 微信中a链接无法进行跳转
- 升级CUDA版本导致VS2010错误:未找到导入的项目XXX,请确认<;Import>;声明中的路径正确,且磁盘上存在该文件
- python字典中的元素类型
- VS集成Qt环境搭建
- 剑指offer--面试题10
- 使用iScroll和photoswipe写手机浏览图片的插件的几点经验
- linux学习历程
- 微信开发之获取jsapi_ticket
- 第八节、图片分割之GrabCut算法、分水岭算法
- Django项目的创建与介绍.应用的创建与介绍.启动项目.pycharm创建启动项目.生命周期.三件套.静态文件.请求及数据.配置Mysql完成数据迁移.单表ORM记录的增删改查
- RVM的安装和使用过程中碰到的问题
- Zookeeper Canary
- 字符串中包含汉字和\u,显示出汉字来
- SQL Server 2008 清空删除日志文件 130G日志 10秒内变10M
- Microsoft Dynamics CRM 2011 安装完全教程
- Java新建线程的两种方式
- 一文总结之MyBatis
- Leaf——美团点评分布式ID生成系统
- 利用MSSQL对不经常使用的表进行依赖缓存