[Godot] C#人物移动抖动解决方案

在写一个2D平台跳跃的游戏代码发现,移动的时候会抖动卡顿的厉害,后来研究了一下抖动问题,有了几种解决方案


1.垂直同步和物理插值问题

这是最常见的可能导致画面撕裂和抖动的原因,大家可以根据自己的需要调整项目设置,选择开启关闭垂直同步和物理插值,以及设置抖动修复的值


2.2D像素吸附

这个常见于2D像素游戏,大家可以设置 ++项目设置-渲染-2D++ ,开启像素吸附的选项来修复


3.坐标圆整(避免亚像素)

我们可以使用 Position = Position.Round(); 代码进行圆整(如果有需要的话),可以对其像素、处理坐标或者避免模糊


4.相机跟随抖动

这是我实际碰到的,因为我的人物移动逻辑写在了_PhysicsProcess函数内,而相机自带的Smooth平滑是写在Process函数里的,所以不一致导致了抖动,我们根据自己的需要,专门给相机写一个跟随代码,放在_PhysicsProcess函数即可

cs 复制代码
using Godot;
using System;

public partial class Camera : Camera2D
{
    [Export] public float SmoothingSpeed;
    private CharacterBody2D PlayerTarget;

    public override void _Ready()
    {
        PlayerTarget = GetNode<CharacterBody2D>("../Player");    //获取同级的玩家节点
    }

    public override void _PhysicsProcess(double delta)
    {
        Vector2 Target = PlayerTarget.GlobalPosition;
        GlobalPosition = GlobalPosition.Lerp(Target, (float)(SmoothingSpeed * delta));
        //这里我使用的是Lerp,如果数值太大跟不上,可以考虑使用MoveToward
    }
}

这是我的相机代码,大家可以根据自己的需要来修改


5.重力代码引起的抖动

这个抖动的原因在于编写玩家重力代码的时候,没有加上地面判断,所以玩家在地面上移动的时候就会上下抖动,解决办法就是加上地面判断,在地面上就不触发重力代码

cs 复制代码
private void PlayerGravity(float delta)
{
    if (IsOnFloor()) return;    //判断是否在地面
    Velocity = new Vector2(Velocity.X, Velocity.Y + _gravity * delta);    //重力代码
}

6.动画Sprite锚点

这个抖动的原因在于Sprite2D 或 AnimatedSprite2D 的中心锚点不一致、帧之间图片大小不一致、或播放动画时存在偏移,会导致视觉上"闪烁"或"抖动",解决方案就是保证尺寸一致,然后统一对齐锚点

相关推荐
X_StarX1 小时前
【Unity笔记02】订阅事件-自动开门
笔记·学习·unity·游戏引擎·游戏开发·大学生
霸王•吕布5 小时前
游戏引擎中顶点着色&像素着色
游戏引擎·顶点着色器·像素着色器·顶点颜色·顶点uv·顶点法向
Thomas_YXQ8 小时前
Unity URP法线贴图实现教程
开发语言·unity·性能优化·游戏引擎·unity3d·贴图·单一职责原则
徐子竣15 小时前
[学习记录]Unity-Shader-几何着色器
unity·游戏引擎·着色器
幻世界1 天前
【Unity智能模型系列】Unity + MediaPipe + Sentis + ArcFace模型:构建高效人脸识别比对系统
unity·游戏引擎
漫游者Nova1 天前
虚幻引擎Unreal Engine5恐怖游戏设计制作教程,从入门到精通从零开始完整项目开发实战详细讲解中英字幕
ue5·游戏引擎·虚幻·游戏开发完整教程·恐怖游戏开发
死也不注释2 天前
【Unity 编辑器工具开发:GUILayout 与 EditorGUILayout 对比分析】
unity·编辑器·游戏引擎
小赖同学啊2 天前
物联网中的Unity/Unreal引擎集成:数字孪生与可视化控制
物联网·unity·游戏引擎
Zlzxzw2 天前
使用unity创建项目,进行动画制作
unity·游戏引擎
X_StarX2 天前
【Unity笔记01】基于单例模式的简单UI框架
笔记·ui·unity·单例模式·游戏引擎·游戏开发·大学生