当前位置: 首页 > news >正文

Godot4.3类星露谷游戏开发之【昼夜循环】

千里之行,始于足下

文章目录

  • 零、 笔记
  • 一、创造时间
  • 二、产生颜色
  • 三、搭建测试环境
  • 四、测试
  • 五、免费开源资产包

零、 笔记

为了让游戏可以拥有白天和黑夜,我们需要像上帝一样,在游戏中创造时间的规则,并在不同的时间点产生不同的颜色。

一、创造时间

第一步,在 res://脚本/全局脚本/ 路径 下,新建脚本 时间管理器.gd

时间管理器.gd
第二步,在项目设置 > 全局 下,添加该脚本为单例,并命名为 TimeManager

TimeManager
第三步,更新 时间管理器.gd 脚本代码 ;

extends Node
## 时间管理 signal 游戏总时间更新(: float)
signal 游戏格式化时间更新(:int,: int,: int,: int)const 每日秒数: int = 24 * 60 * 60
const 每时秒数: int = 60 * 60
const 每分秒数: int = 60
const 时间单元: Array[Array] = [[每日秒数, "天"],[每时秒数, "小时"],[每分秒数, "分钟"],[1, "秒"],
]# 初始游戏时间,第1天6:00:00
var 初始游戏天数: int = 1
var 初始游戏小时数: int = 6
var 初始游戏分钟数: int = 0
var 初始游戏秒数: int = 0# 累计游戏时间
var 累计游戏时间: float = 0.0# 其他设置
var 时间流速: float = 1000.0
var 时间暂停: bool = false# 初始化累计游戏时间
func _ready() -> void:累计游戏时间 = 计算初始总秒数()# 产生时间
func _process(delta: float) -> void:if 时间暂停:return累计游戏时间 += delta * 时间流速#print_debug("累计游戏时间:", 累计游戏时间)# 发送时间信号游戏总时间更新.emit(累计游戏时间)# 转换格式并发送时间信号var 格式化时间: Array[int] = 转换时间格式(int(累计游戏时间))游戏格式化时间更新.emit(格式化时间)# 计算初始时间总秒数
func 计算初始总秒数() ->float:return (初始游戏天数 * 每日秒数 +初始游戏小时数 * 每时秒数 +初始游戏分钟数 * 每分秒数 +初始游戏秒数)# 格式转换:总秒数 -> 日/时/分/秒
func 转换时间格式(总秒数: int) ->Array[int]:# 异常处理if 总秒数 < 0:push_error("无效的时间参数")return [0, 0, 0, 0]# 格式转换var 剩余秒数 = int(总秒数)var 结果:Array[int] = []for 单元 in 时间单元:var 值 = 剩余秒数 / 单元[0]剩余秒数 %= 单元[0]结果.append()print_debug(结果)	return 结果

二、产生颜色

第一步,以 昼夜循环组件(CanvasModulate) 为根节点,在 res://场景/组件/ 路径下,创建新场景;

昼夜循环组件
第二步,选中 昼夜循环组件 节点,附加脚本;

class_name 昼夜循环组件
extends CanvasModulate@export var 昼夜渐变纹理: GradientTexture1Dfunc _ready() -> void:TimeManager.游戏总时间更新.connect(昼夜更替)func 昼夜更替(: float) ->void:var 每日秒数: int = 24 * 60 * 60# 从正弦函数中获取在 0和1 之间来回变动的采样值:y = 1/2(sin2πx + 1),y ∈ [0,1]var 采样值: float = sin(/ 每日秒数 * 2 * PI - (0.5 * PI) ) * 0.5 + 0.5# 根据采样值产生纹理变化,形成昼夜更替的效果color = 昼夜渐变纹理.gradient.sample(采样值)  # 昼夜渐变纹理#print("采样值:", 采样值)

第三步,选中 昼夜循环组件 节点,在检查器中新建 GradientTexture1D

新建GradientTexture1D
第四步,在展开的Gradient中设置 栅格吸附 的值为 12 ,从左到右代表从晚上0点到中午12点,从右到左代表从中午12点到晚上0点

栅格吸附
第五步,开始设置各个时间点的颜色,这里设置 0时、1时、3时、5时、6时、12时 作为示范——鼠标左(右)键点击色卡可以创建(撤销)颜色;

0时、1时、3时、5时、6时、12时
第六步,分别双击各个柱体,在弹出的色盘中设置颜色,完全根据个人喜好来,这里0时是海蓝色,1时是浅蓝色,3时时天青色,5时是橘红色,6时是淡黄色,12点是白色;

双击各个柱体

三、搭建测试环境

第一步,将 测试_基本地形 场景复制为 测试_昼夜循环 ,并更改根节点名为 测试_昼夜循环

测试_昼夜循环1
测试_昼夜循环2

第二步,在测试_昼夜循环场景中,实例化 昼夜循环组件

实例化昼夜循环组件

四、测试

打开 测试_昼夜循环 场景,运行场景,测试昼夜循环效果;

测试昼夜循环效果
测试完成!

五、免费开源资产包

某开源网站精灵图资源包链接: 点击此处

  1. 进入链接后点击下图按钮
    下载

  2. 然后点击【No thanks,just take me to the downloads】(不了谢谢,只想下载)
    No thanks,just take me to the downloads

  3. 最后点击下图按钮完成下载(注意导入前需解压缩)
    下载

相关文章:

  • 【软件设计师:数据】17.数据安全
  • 人力资源管理系统如何有效提高招聘效率?
  • Navicat 17最新保姆级安装教程(附安装包+永久使用方法)
  • 软件设计师教程——第一章 计算机系统知识(下)
  • 不同渲染任务,用CPU还是GPU?
  • upload文件上传
  • MySQL 的锁机制
  • Webug4.0靶场通关笔记24- 第29关Webshell爆破
  • Linux 大于2T磁盘分区
  • opencv中的图像特征提取
  • RK3588 Ubuntu安装Qt6
  • 从代码学习深度学习 - 区域卷积神经网络(R-CNN)系列 PyTorch版
  • levelDB的数据查看(非常详细)
  • 【面板数据】各省双向FDI协调发展水平数据集(2005-2022年)
  • 并发 vs 并行编程详解
  • el-form的label星号位置如何修改
  • Vue3 路由配置与跳转传参完整指南
  • MySQL主从同步(主从复制)
  • RDD行动算子案例
  • 论文分享➲ ICLR2025 Oral | Scaling and evaluating sparse autoencoders
  • 构建菌株有效降解有机污染物,上海交大科研成果登上《自然》
  • 长期对组织隐瞒真实年龄,广元市城发集团原董事韩治成被双开
  • 国家税务总局泰安市税务局:山东泰山啤酒公司欠税超536万元
  • 85后清华博士黄佐财任湖北咸宁市咸安区委副书记、代区长
  • 5月12日至13日北京禁飞“低慢小”航空器
  • 北京:下调个人住房公积金贷款利率