[Godot3.3.3] - 过渡动画

过渡动画 ScreenTransitionAnimation

项目结构

添加场景,根节点为 CanvasLayer2D 并重命名为 ScreenTransition:

image-20240712002547221

添加子节点 ColorRectAnimationPlayer,在 ColorRect 中将颜色(Color)设置为黑色:

image-20240712002657042

找到 Material,新建 Shader(先不管Shader Param 中的 Wipe Image,后面才会加入,这里是做好之后的样子):

image-20240712002743876

Shader Code

Shader 中敲入代码:

shader_type canvas_item;
// 申明 shader 的类型,因为是 2d 游戏,所以是 canvas_item 类型的

uniform sampler2D wipeImage;	// 全局变量 wipeImage
uniform float percent : hint_range(0, 1);	// 限制在 01 之间的百分比范围

void fragment() {
	float texVal = texture(wipeImage, UV).r;
	// 对图像的 r 通道进行采样
	
	if (texVal < percent) {
		// 在 Animation 中进行动态改变 percent 并且让 百分比不断变大,就可以有一个动态变透明的效果(虽然没有完全弄懂,但大致是这样没错的)
		COLOR.a = 0.0;
	}
}

AnimationPlayer

先为根节点添加一个脚本:

extends CanvasLayer

signal screen_covered

func emit_screen_covered():
	emit_signal("screen_covered")
    // 这个函数用来发送信号

然后打开 Animation Player 添加 default 动画:

第一个轨道中的 ColorRect > material:shader 必须在 shader 检查器其中点击小钥匙添加动画帧才可以添加

image-20240712003234496

ScreenTransitionManager

新建场景 ScreenTransitionManager 并在项目设置中设置为自动加载的场景,为根节点添加脚本:

extends Node

var screenTransitionScene = preload("res://scenes/UI/ScreenTransition.tscn")

func transition_to_scene(scenePath):
	var screenTransition = screenTransitionScene.instance()
	add_child(screenTransition)
	yield(screenTransition, "screen_covered")
	get_tree().change_scene(scenePath)

调用方法

以项目中的开始菜单为例子,点击开始菜单调用函数的过程如下:

func on_playButton_pressed():
	$"/root/LevelManager".change_level

change_levelLevelManager中 的函数,将它这样修改即可:

func change_level(levelIndex):
	currentLevelIndex = levelIndex
	if (currentLevelIndex >= levelScenes.size()):
		currentLevelIndex = 0
	$"/root/SceenTransitionManager".transition_to_scene(levelScenes[currentLevelIndex].resource_path)	// 获取路径并通过动画过渡脚本来延迟调用场景的切换,达到淡入淡出的效果

相关推荐

  1. vue3 过渡动画

    2024-07-12 05:02:03       73 阅读
  2. Vue 过渡动画

    2024-07-12 05:02:03       32 阅读
  3. WPF添加动画过渡效果

    2024-07-12 05:02:03       21 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 05:02:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 05:02:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 05:02:03       58 阅读
  4. Python语言-面向对象

    2024-07-12 05:02:03       69 阅读

热门阅读

  1. 墨烯的C语言技术栈-C语言基础-012

    2024-07-12 05:02:03       27 阅读
  2. Kubernetes(k8s)架构的工作原理

    2024-07-12 05:02:03       29 阅读
  3. 【问题记录】xxl-job admin端锁超时问题

    2024-07-12 05:02:03       26 阅读
  4. CNN -1 神经网络-概述2

    2024-07-12 05:02:03       25 阅读
  5. 使用 CSS 实现多列布局

    2024-07-12 05:02:03       22 阅读
  6. 【LeetCode】633. 平方数之和

    2024-07-12 05:02:03       20 阅读
  7. 深度优先算法-DFS(算法篇)

    2024-07-12 05:02:03       24 阅读
  8. C++ override关键字

    2024-07-12 05:02:03       24 阅读