网站建设设计规划推推蛙贴吧优化
目录
实现效果
场景搭建
脚本实现
移动
动画
完整脚本
相机跟随
总结
实现效果
场景搭建
本文章只分享了关于移动和动画的,没有给碰撞体,大家根据需要自行添加吧
相机的缩放大小可以根据自己的需要调整
我的人物动画结构是这样的,待机动(idle)}和移动动画(walk)
脚本实现
移动
首先,我们需要声明一个移动速度变量,然后将移动代码写在Process函数中
using Godot;
using System;public partial class Player : CharacterBody2D
{[Export] public float moveSpeed;public override void _Process(double delta){Move((float)delta);}void Move(float delta){Vector2 direction = Vector2.Zero;if (Input.IsActionPressed("right"))direction.X += 1;if (Input.IsActionPressed("left"))direction.X -= 1;if (Input.IsActionPressed("down"))direction.Y += 1;if (Input.IsActionPressed("up"))direction.Y -= 1;direction = direction.Normalized();Velocity = direction * moveSpeed;MoveAndSlide(); //根据速度滑动式移动角色,并自动处理碰撞}}
构建场景,在人物面板设置变量值,然后在面板里面添加按键映射,我们可以就能正常的移动人物了
动画
接下来是动画部分,我用枚举实现了一个简单的状态机,并且在移动代码里面添加了水平翻转的代码
using Godot;
using System;public partial class Player : CharacterBody2D
{private enum AnimState{idle,walk}AnimState animState = AnimState.idle;private AnimatedSprite2D _playerAnim;public override void _Ready(){_playerAnim = GetNode<AnimatedSprite2D>("./AnimatedSprite2D");}public override void _Process(double delta){Move((float)delta);AnimStateSwitch();}void Move(float delta){...if (direction != Vector2.Zero){...if (direction.X > 0) _playerAnim.FlipH = false;else if (direction.X < 0) _playerAnim.FlipH = true;}else{animState = AnimState.idle;}}void AnimStateSwitch(){switch (animState){case AnimState.idle: _playerAnim.Play("idle"); break;case AnimState.walk: _playerAnim.Play("walk"); break;}}
}
构建并运行场景,我们就能丝滑的控制人物的动画了
完整脚本
using Godot;
using System;public partial class Player : CharacterBody2D
{[Export] public float moveSpeed;private enum AnimState{idle,walk}AnimState animState = AnimState.idle;private AnimatedSprite2D _playerAnim;public override void _Ready(){_playerAnim = GetNode<AnimatedSprite2D>("./AnimatedSprite2D");}public override void _Process(double delta){Move((float)delta);AnimStateSwitch();}void Move(float delta){Vector2 direction = Vector2.Zero;if (Input.IsActionPressed("right"))direction.X += 1;if (Input.IsActionPressed("left"))direction.X -= 1;if (Input.IsActionPressed("down"))direction.Y += 1;if (Input.IsActionPressed("up"))direction.Y -= 1;direction = direction.Normalized();if (direction != Vector2.Zero){Velocity = direction * moveSpeed;animState = AnimState.walk;MoveAndSlide();if (direction.X > 0) _playerAnim.FlipH = false;else if (direction.X < 0) _playerAnim.FlipH = true;}else{animState = AnimState.idle;}}void AnimStateSwitch(){switch (animState){case AnimState.idle: _playerAnim.Play("idle"); break;case AnimState.walk: _playerAnim.Play("walk"); break;}}
}
相机跟随
关于相机的平滑跟随,我们有一个简单的办法,设置Position Smoothing属性Enabled为True即可平滑跟随,可以设置speed来控制跟随的速度
总结
这里简单的跟大家分享了一下基础的控制人物方法,大家可以根据需要自行调整