zoukankan      html  css  js  c++  java
  • 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;
                    }
                }
            }
             
            
    
        }
    }
    
    
  • 相关阅读:
    ectouch第四讲 之缓存文件的生成
    ectouch第三讲之加载调用机制
    Ubuntu 16.04下安装sublime Text的插件
    有关于Git操作(持续更新)
    MongoDB简单查询语句<平时使用语录,持续更新>
    Ruby小白入门笔记之<Rubymine工具的快捷键>
    Ruby小白入门笔记之 <Gemfile 文件>
    Ubuntu 16.04安装、卸载mysql及怎么使用SQL常用操作语句
    Git中.gitignore忽略文件(maven项目)
    Git入门之常用命令(转载阮一峰老师)
  • 原文地址:https://www.cnblogs.com/LRolinx/p/13850387.html
Copyright © 2011-2022 走看看