IT虾米网

Unity 昼夜交替

itcoder 2022年11月07日 编程语言 36 0

说明

将脚本挂载在Directional Light上,并将Directional Light的Rotation属性按照下图设置。

太阳环绕一周设定为24分钟。

可以选择初始时间为系统时间 / 随机时间 /预设时间。

最下面是游戏世界的时间。

效果

代码

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 
 
public class SunMove : MonoBehaviour 
{ 
     
    public float OrbitMinute = 24;      //太阳转一周,所需的时间设为24分钟 
    private float AnglePerSec = 0; 
 
    //Real Time 
    [Range(0, 1440)] 
    public float sec = 0; 
    private float min = 0; 
 
    public DefaultTime defaultTime = DefaultTime.SystemTime; 
    public enum DefaultTime 
    { 
        SystemTime, 
        Random, 
        Preset, 
    } 
 
    public float PresetTime = 7; 
 
    [Header("Only Read")] 
    //Game Time 
    public float GameHour = 0; 
    public float GameMin = 0; 
 
    void Start() 
    { 
        AnglePerSec = 360 / OrbitMinute / 60; 
        if (defaultTime == DefaultTime.SystemTime) 
            SetTime(System.DateTime.Now.Hour); 
        else if (defaultTime == DefaultTime.Random) 
            SetTime(Random.Range(0, 24)); 
        else if (defaultTime == DefaultTime.Preset) 
            SetTime(PresetTime); 
    } 
 
    void Update() 
    { 
        sec += Time.deltaTime; 
        min = sec / 60; 
        GameHour = (int) min % OrbitMinute; 
        GameMin = (int) sec % 60; 
 
        gameObject.transform.rotation = Quaternion.Euler(SunAngle(GameHour, GameMin), -90, 0); 
    } 
 
    float SunAngle(float hour) 
    {        
        return 360 / OrbitMinute * hour - 90;      
    } 
 
    float SunAngle(float hour,float minute) 
    { 
        return 360 / OrbitMinute * hour - 90 + AnglePerSec * minute; 
    } 
 
    void SetTime(float hour) 
    { 
        sec = hour * 60; 
    } 
} 

本文参考链接:https://blog.csdn.net/m0_67391870/article/details/123524611
评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

Java多线程中Lock锁如何使用