godot 4 实现代码动态设置纹理素材,动态添加人物动画并加入全局动画集,实现人物多动作8方向动画【素材来源网络,仅供学习参考,请勿商用】

godot 4 实现代码动态设置纹理素材,动态添加人物动画并加入全局动画集,实现人物多动作8方向动画

  1. 素材如下:

站立素材:
在这里插入图片描述
跑动素材:
在这里插入图片描述

  1. 工程项目如下:在这里插入图片描述
    3.实现代码如下:
extends Node2D

# 素材载体
@onready var body : Sprite2D = $body
# 动画播放器
@onready var player : AnimationPlayer = $player


func _ready():
	# 角色名称
	var character_model_name = "巫蛮儿"
	
	# 人物跑动动画名称开头
	var run = "跑动"
	# 人物跑动素材大小
	var run_texture_size = Vector2(1432,1096) 
	var run_sprite_size = Vector2(179,137)
	
	# 人物站立动画名称开头
	var stand = "站立"
	# 人物站立素材大小
	var stand_texture_size =  Vector2(1200,1152)
	var stand_sprite_size = Vector2(120,144)
	
	# 人物坐标
	self.position = Vector2(100,100)
	
	# 添加跑动素材的全部动画
	add_animations(character_model_name, run, run_texture_size, run_sprite_size)
	# 添加站立素材的全部动画
	add_animations(character_model_name, stand, stand_texture_size, stand_sprite_size)
	

func _physics_process(_delta):
	player.play("巫蛮儿/跑动_4")


# 添加某个类型全部动画 
# character_model_name  角色模型
# texture_name          纹理素材名称
# texture_size          纹理素材大小
# sprite_size           纹理素材中每个精灵的大小
func add_animations(character_model_name, texture_name, texture_size, sprite_size):
	# 素材路径拼接
	var full_texture_path = "res://素材/人物/" + character_model_name + "/" + texture_name + ".png"
	# 加载素材
	var full_texture = load(full_texture_path)
	# 获取素材的列数
	var num_columns = int(texture_size.x / sprite_size.x)
	# 获取素材的行数
	var num_rows = int(texture_size.y / sprite_size.y)
	
	# 获取角色动画库
	var animation_library : AnimationLibrary 
	# 如果角色动画库不存在,则新建角色动画库
	if !player.has_animation_library(character_model_name):
		animation_library = AnimationLibrary.new()
		player.add_animation_library(character_model_name, animation_library)	
	else:
		animation_library = player.get_animation_library(character_model_name)	
	
	# 设置素材
	body.texture = full_texture
	# 设置素材动画行数和列数
	body.hframes = num_columns
	body.vframes = num_rows
		
	# 遍历逐行,每个动画一行
	for x in range(num_rows):
		# 创建动画
		var anim = Animation.new()
		# 清空动画
		anim.clear()
		# 设置动画循环播放
		anim.loop = true
		
		# 新建属性轨道
		var	track = anim.add_track(Animation.TYPE_VALUE)
		# 添加body:frame_coords轨道
		anim.track_set_path(track, "body:frame_coords")
		# 设置更新方式为关键帧
		anim.value_track_set_update_mode(track, Animation.UPDATE_DISCRETE)
		
		# 定义动画的帧时间
		var frame_time : float
		# 遍历素材一行的每个元素
		for y in range(num_columns):
			# 动画插入关键帧属性,关键帧是frame_coords属性坐标
			anim.track_insert_key(track, frame_time, Vector2(y, x))
			# 每个0.1秒插入一个关键帧,放在插入后是因为关键帧从0秒开始插入
			frame_time = frame_time + 0.1
		
		# 设置动画长度	
		anim.set_length(frame_time)
		
		# player全局动画库循环加入动画
		animation_library.add_animation(texture_name + "_" + String.num(x), anim)
	
			
  1. 理解:
    动态添加的属性
    在这里插入图片描述
    轨道属性:
    在这里插入图片描述
  2. 运行视频

godot 4 实现代码动态设置纹理素材,动态添加人物动画并

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值