素材,动态添加人物动画并加入全局动画集,实现人物多动作8方向动画【素材来源网络,仅供学习参考,请勿商用】"/>
godot 4 实现代码动态设置纹理素材,动态添加人物动画并加入全局动画集,实现人物多动作8方向动画【素材来源网络,仅供学习参考,请勿商用】
godot 4 实现代码动态设置纹理素材,动态添加人物动画并加入全局动画集,实现人物多动作8方向动画
- 素材如下:
站立素材:
跑动素材:
- 工程项目如下:
3.实现代码如下:
extends Node2D# 素材载体
@onready var body : Sprite2D = $body
# 动画播放器
@onready var player : AnimationPlayer = $playerfunc _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_columnsbody.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)
- 理解:
动态添加的属性
轨道属性:
- 运行视频
godot 4 实现代码动态设置纹理素材,动态添加人物动画并
更多推荐
godot 4 实现代码动态设置纹理素材,动态添加人物动画并加入全局动画集,实现人物多动作8方向动画【素材来源网络,仅供学习参考,请勿商用】
发布评论