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

最新文章

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

热门文章

  1. Java读取excel 支持xls 和 xlsx格式
  2. git线上操作
  3. 我告诉你一个 AtomicInteger 的惊天大秘密
  4. 实验 3:Mininet 实验——测量路径的损耗率
  5. 口罩预约管理系统——系统网站实现(前端+PHP+MySQL)
  6. vue学习09 图片切换
  7. vscode写latex的正反向搜索问题
  8. spring javabean以及反射机制
  9. Appium的一些问题的总结答案
  10. 081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字