当前位置: 首页 > news >正文

[Godot] C#简单实现人物的控制和动画

目录

实现效果

 场景搭建

脚本实现

移动

 动画

完整脚本

相机跟随

总结


实现效果


 场景搭建

  本文章只分享了关于移动和动画的,没有给碰撞体,大家根据需要自行添加吧

  相机的缩放大小可以根据自己的需要调整

  我的人物动画结构是这样的,待机动(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属性EnabledTrue即可平滑跟随,可以设置speed来控制跟随的速度


总结

  这里简单的跟大家分享了一下基础的控制人物方法,大家可以根据需要自行调整

相关文章:

[Godot] C#简单实现人物的控制和动画

目录 实现效果 场景搭建 脚本实现 移动 动画 完整脚本 相机跟随 总结 实现效果 场景搭建 本文章只分享了关于移动和动画的&#xff0c;没有给碰撞体&#xff0c;大家根据需要自行添加吧 相机的缩放大小可以根据自己的需要调整 我的人物动画结构是这样的&#xff0c;待机动…...

选择站群服务器租用的优势都有什么?

站群服务器是一种专门用于托管多个网站的服务器&#xff0c;是通过集中管理和资源分配&#xff0c;可以支持同时运行数十个甚至是数百个独立网站&#xff0c;站群服务器的主要特点就是让每个网站可以分配独立的IP地址&#xff0c;避免出现IP关联风险&#xff0c;通过统一控制面…...

VS Code下开发FPGA——FPGA开发体验提升__下

上一篇&#xff1a;IntelliJ IDEA下开发FPGA-CSDN博客 Type&#xff1a;Quartus 一、安装插件 在应用商店先安装Digtal IDE插件 安装后&#xff0c;把其他相关的Verilog插件禁用&#xff0c;避免可能的冲突。重启后&#xff0c;可能会弹出下面提示 这是插件默认要求的工具链&a…...

leetcode13.罗马数字转整数

遍历&#xff0c;下一个值不大于当前值就加上当前值&#xff0c;否则就减去当前值 class Solution {public int romanToInt(String s) {Map<Character, Integer> map Map.of(I, 1,V, 5,X, 10,L, 50,C, 100,D, 500,M, 1000);int sum 0;for (int i 0; i < s.length(…...

WVP-PRO配置与部署

ZLMediaKit部署与配置 https://blog.csdn.net/qq_38179971/article/details/147043763MySQL8.0.13安装[Ubuntu16.04] cd /usr/local/src wget http://soft.vpser.net/lnmp/lnmp1.6.tar.gz -cO lnmp1.6.tar.gz && tar zxf lnmp1.6.tar.gz && cd lnmp1.6 &…...

opencv图像库编程

目录 一、Linux搭建C OpenCV开发环境1.安装必要依赖项2.安装opencv3、cmake分析4、验证安装 二、编写一个打开图片进行特效显示的代码 test.cpp1.gcc方式编译1&#xff09;在opencv3.4.5下新建mytest文件夹2&#xff09;创建test.cpp3&#xff09;编译 2.makemakefile方式编译3…...

【Easylive】定时任务-每日数据统计和临时文件清理

【Easylive】项目常见问题解答&#xff08;自用&持续更新中…&#xff09; 汇总版 这个定时任务系统主要包含两个核心功能&#xff1a;每日数据统计和临时文件清理。下面我将详细解析这两个定时任务的实现逻辑和技术要点&#xff1a; Component Slf4j public class SysTas…...

搜广推校招面经七十

美团暑期推荐实习 一、讲一下self-attention&#xff0c;qkv的含义。 见【搜广推校招面经五】 二、讲一下协同过滤召回&#xff0c;新闻推荐项目为什么不用usercf? 见【搜广推校招号面经六十四】 三、介绍信息增益公式&#xff08;Information Gain&#xff09; 见【搜广…...

TypeScript 泛型详解及应用场景

泛型&#xff08;Generics&#xff09;是 TypeScript 的核心特性&#xff0c;它允许我们编写可复用、类型安全的代码&#xff0c;同时保持灵活性。以下是深度解析和实际应用指南&#xff1a; 一、泛型基础概念 本质&#xff1a;参数化类型&#xff0c;将类型作为变量传递&…...

Proximal Policy Optimization (PPO)2017

2.1 策略梯度方法 策略梯度方法计算策略梯度的估计值并将其插入到随机梯度上升算法中。最常用的梯度估计器的形式如下&#xff1a; g ^ E t [ ∇ θ log ⁡ π θ ( a t ∣ s t ) A ^ t ] (1) \hat{g} \mathbb{E}_t \left[ \nabla_{\theta} \log \pi_{\theta}(a_t | s_t) \h…...

使用 Google ML Kit 实现图片文字识别(提取美国驾照信息)

Google ML Kit 是一个现代、功能强大、跨平台的机器学习 SDK。在这篇文章中&#xff0c;我们将使用 ML Kit 在 Android 应用中识别图片文字&#xff0c;以提取美国驾照上的关键信息&#xff1a;DL&#xff08;驾照号&#xff09; 和 EXP&#xff08;有效日期&#xff09;。 &am…...

VR体验馆如何用小程序高效引流?3步打造线上预约+团购裂变系统

VR体验馆如何用小程序高效引流&#xff1f;3步打造线上预约团购裂变系统 一、线上预约的核心价值&#xff1a;优化体验&#xff0c;提升转化​​ ​​减少客户等待时间​​ 通过小程序预约功能&#xff0c;客户可提前选择体验时段&#xff0c;避免到店排队。数据显示&#…...

前端知识(vue3)

1.Vue3 1.1 介绍 Vue&#xff08;读音 /vjuː/, 类似于 view&#xff09;是一款用于构建用户界面的渐进式的JavaScript框架 官网&#xff1a;https://cn.vuejs.org 1.2 常见指令 指令&#xff1a;指的是HTML 标签上带有 v- 前缀的特殊属性&#xff0c;不同指令具有不同含义…...

nginx 代理 https 接口

代码中需要真实访问的接口是&#xff1a;https://sdk2.028lk.com/application-localizationdev.yml文件中配置&#xff1a; url: http:/111.34.80.138:18100/sdk2.028lk.com/该服务器111.34.80.138上 18100端口监听&#xff0c;配置信息为&#xff1a; location /sdk2.028lk.c…...

网络带宽测速工具选择指南iperf3 nttcp tcpburn jperf使用详解

简介 本文主要介绍内网&#xff08;局域网&#xff09;与外网&#xff08;互联网&#xff09;的网络带宽测速工具下载地址、选择指南、参数对比、基本使用。 测速工具快速选择指南 测速工具下载地址 iperf 官网下载链接&#xff1a;iperf.fr/iperf-download.php该链接提供了不…...

解决TF-IDF增量学习问题的思路与方案

TF-IDF的传统实现面临增量学习困难&#xff0c;因为IDF计算依赖全局文档统计信息。但是实际的工作当中往往数据是增量的&#xff0c;并且定期增量和不定期增量混合&#xff0c;所以为了实际考虑&#xff0c;还是有必要思考如何解决TF-IDF增量问题的。 一、增量学习核心挑战 ID…...

【亲测】Linux 使用 Matplotlib 显示中文

文章目录 安装中文字体在Matplotlib中使用该字体来显示中文 在 Linux 系统中使用 Matplotlib 绘制图表时&#xff0c;如果需要显示中文&#xff0c;可能会遇到中文字符显示为方块或者乱码的问题。这是因为Matplotlib 默认使用的字体不支持中文。本文手把手带你解决这个问题。 …...

git clone阻塞问题

问题描述 git clone采用的ssh协议&#xff0c;在克隆仓库的时候&#xff0c;会经常卡一下&#xff0c;亦或是直接卡死不动。 最开始以为是公司电脑配置的问题&#xff0c;想着自己实在解决不了找it帮忙。 查阅资料发现&#xff0c;最终发现是git版本的问题&#xff0c;这个是…...

Json快速入门

引言 Jsoncpp 库主要是用于实现 Json 格式数据的序列化和反序列化&#xff0c;它实现了将多个数据对象组织成 为Json格式字符串&#xff0c;以及将 Json 格式字符串解析得到多个数据对象的功能&#xff0c;独立于开发语言。 Json数据对象 Json数据对象类的表示&#xff1a; …...

【QT】学习笔记1

QT概述 Qt是一个1991年由QtCompany开发的跨平台C图形用户界面应用程序开发框架。它既可以开发GUI程序&#xff0c;也可用于开发非GUI程序&#xff0c;比如控制台工具和服务器。Qt是面向对象的框架&#xff0c;使用特殊的代码生成扩展&#xff08;称为元对象编译器&#xff08;…...

【Kafka基础】生产者命令行操作指南:从基础到高级配置

Kafka作为分布式消息系统&#xff0c;其生产者是数据管道的起点。掌握kafka-console-producer.sh工具的使用对于开发测试和运维都至关重要。本文将系统介绍该工具的各种用法&#xff0c;帮助您高效地向Kafka发送消息。 1 基础消息生产 1.1 最简单的消息发送 /export/home/kafk…...

【Java面试系列】Spring Boot中自动配置原理与自定义Starter开发实践详解 - 3-5年Java开发必备知识

【Java面试系列】Spring Boot中自动配置原理与自定义Starter开发实践详解 - 3-5年Java开发必备知识 引言 Spring Boot作为Java生态中最流行的框架之一&#xff0c;其自动配置机制和Starter开发是面试中的高频考点。对于3-5年经验的Java开发者来说&#xff0c;深入理解这些原理…...

reid查找余弦相似度计算修正(二)

上一篇文章 reid查找余弦相似度计算(一) 上一篇的遗留问题就是reid 的结果部分正确&#xff0c;我们参考一下 fast-reid的demo&#xff0c;把里面的抽取特征提取出来 修改提取特征 首先发现图像改变大小的不同&#xff0c;fast 使用的是[128&#xff0c;384]&#xff0c; 如…...

嵌入式---加速度计

一、基本概念与定义 定义 加速度计&#xff08;Accelerometer&#xff09;是一种测量物体加速度&#xff08;线性加速度或振动加速度&#xff09;的传感器&#xff0c;可检测物体运动状态、振动幅度、倾斜角度等&#xff0c;输出与加速度成比例的电信号&#xff08;模拟或数字信…...

Redis如何判断哨兵模式下节点之间数据是否一致

在哨兵模式下判断两个Redis节点的数据一致性&#xff0c;可以通过以下几种方法实现&#xff1a; 一、检查主从复制偏移量 使用INFO replication命令 分别在主节点和从节点执行该命令&#xff0c;比较两者的master_repl_offset&#xff08;主节点&#xff09;和slave_repl_offs…...

Spring 核心注解深度解析:@Autowired、@Repository 与它们的协作关系

引言 在 Spring 框架中&#xff0c;​依赖注入&#xff08;DI&#xff09;​​ 是实现松耦合架构的核心机制。Autowired 和 Repository 作为两个高频使用的注解&#xff0c;分别承担着 ​依赖装配​ 和 ​数据访问层标识​ 的关键职责。本文将深入探讨它们的功能特性、协作模式…...

LeetCode541反转字符串②

思路&#xff1a; 关键是判断反转的右边界&#xff0c; ①当剩余字符数<k&#xff0c;是反转当前所有字符&#xff0c;右边界就是rightlen-1&#xff0c;不可以超过len-1&#xff0c;会越界&#xff1b; ②当剩余字符数>k且<2k,反转k个字符&#xff0c;右边界就是righ…...

Ubuntu 22 Linux上部署DeepSeek+RAG知识库操作详解(Dify方式)之2

上一篇在ubuntu上通过docker拉取了dify并启动与它相关的服务&#xff0c;本篇主要介绍两个知识点&#xff1a; 一是配置模型&#xff0c;使用之前通过Xinference搭建的本地deepseek模型&#xff0c;启动过程参考前期文档&#xff0c;这里就不做介绍了。&#xff08;注意一点&a…...

如何在多线程中安全地使用 PyAudio

1. 背景介绍 在多线程环境下使用 PyAudio 可能会导致段错误&#xff08;Segmentation Fault&#xff09;或其他不可预期的行为。这是因为 PyAudio 在多线程环境下可能会出现资源冲突或线程安全问题。 PyAudio 是一个用于音频输入输出的 Python 库&#xff0c;它依赖于 PortAu…...

Spring MVC与Spring Boot文件上传配置项对比

Spring MVC与Spring Boot文件上传配置项对比 一、Spring MVC配置项&#xff08;基于不同MultipartResolver实现&#xff09; 1. 使用 CommonsMultipartResolver&#xff08;Apache Commons FileUpload&#xff09; Bean public MultipartResolver multipartResolver() {Common…...

多类型医疗自助终端智能化升级路径(代码版.上)

大型医疗自助终端的智能化升级是医疗信息化发展的重要方向,其思维链一体化路径需要围绕技术架构、数据流协同、算法优化和用户体验展开: 一、技术架构层:分布式边缘计算与云端协同 以下针对技术架构层的分布式边缘计算与云端协同模块,提供具体编程实现方案: 一、边缘节点…...

Chrome 浏览器插件收录

1. Responsive Viewer 可以在同个窗口内&#xff0c;针对同一网站&#xff0c;添加多个不同设备屏幕显示。 在前端开发&#xff0c;需要多端适配&#xff0c;尤其是移动端响应式适配的网站开发中&#xff0c;可以同时测试多个不同屏幕的适配效果。 2. VisBug 提供工具栏&#x…...

力扣hot100_回溯(2)_python版本

一、39. 组合总和&#xff08;中等&#xff09; 代码&#xff1a; class Solution:def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:ans []path []def dfs(i: int, left: int) -> None:if left 0:# 找到一个合法组合ans.append(pa…...

文档大模型

处理流程&#xff1a; 对表格或者文章文档切分成chunk&#xff0c;将其存入DB根据chunk文档内容&#xff0c;通过prompt生成问题&#xff08;qwen&#xff09;通过sentencetransformer生成embbedding(Text embedding 模型 stella_large 模型&#xff0c;长文本编码), 第二步 抽…...

基于分布式指纹引擎的矩阵运营技术实践:突破平台风控的工程化解决方案

一、矩阵运营的技术痛点与市场现状 风控机制升级 主流平台通过复合指纹识别&#xff08;Canvas渲染哈希WebGL元数据AudioContext频率分析&#xff09;检测多账号关联传统方案成本&#xff1a;单个亚马逊店铺因关联封号月均损失$5000&#xff0c;矩阵规模越大风险指数级增长 …...

SpringBoot 统一功能处理

1.拦截器 1.1什么是拦截器 拦截器是Spring框架提供的核心功能之一&#xff0c;主要是用来拦截用户的请求&#xff0c;在用户请求指定的方法执行前后&#xff0c;可以根据业务需要执行实现预定的代码。 通过拦截器&#xff0c;开发人员就可以根据需求针对一些特殊的请求&#…...

Redis到底能不能做主数据库?

张三拍案而起&#xff1a;“Redis 是缓存数据库&#xff0c;怎么能当主数据库用&#xff1f;简直是天方夜谭&#xff01;” 李四冷笑回应&#xff1a;“你没用过&#xff0c;凭什么说不行&#xff1f;我已经用 Redis 做主数据库好几年了&#xff0c;系统稳定得像铁板一块&…...

C++ 基础进阶

C 基础进阶 内容概述&#xff1a; 函数重载&#xff1a;int add(int x, inty);&#xff0c;long long add(long long x, long long y);&#xff0c;double add(double x, double y);模板函数&#xff1a;template<typename T> 或 template<class T>结构体&#x…...

从C语言到Go语言:新手快速入门指南

对于刚学会C语言的新手来说&#xff0c;学习Go语言&#xff08;Golang&#xff09;可能是一个既有趣又有挑战性的过程。Go语言由Google开发&#xff0c;以简洁、高效和并发支持著称&#xff0c;被广泛用于现代软件开发。相比C语言&#xff0c;Go语言在语法上更加现代化&#xf…...

Vue.js 中 v-model 的使用及其原理

在 Vue.js 开发中&#xff0c;v-model是一个非常重要且常用的指令。它极大地简化了表单元素与数据之间的双向绑定操作&#xff0c;让开发者能够更高效地处理用户输入和数据更新。接下来&#xff0c;我们将深入探讨v-model的使用场景及其背后的工作原理。​ 一、v-model 的基本…...

深入解析哈希表:从原理到实现(拉链法详解)

哈希表&#xff08;Hash Table&#xff09;是计算机科学中最重要的数据结构之一&#xff0c;它能够在平均 O(1) 时间内完成数据的插入、删除和查找操作。本文将围绕**拉链法&#xff08;Chaining&#xff09;**的实现&#xff0c;结合代码示例和图示&#xff0c;深入讲解哈希表…...

okcc呼叫中心系统坐席签入长签和普通签入的区别

在OKCC呼叫中心系统中&#xff0c;坐席的长签&#xff08;持久签入&#xff09;与普通签入&#xff08;常规签入&#xff09;是两种不同的登录模式&#xff0c;主要区别体现在 会话保持时长、资源占用、业务场景适配性 等方面。以下是具体对比&#xff1a; 一、核心区别对比 维…...

2024年博客之星的省域空间分布展示-以全网Top300为例

目录 前言 一、2024博客之星 1、所有排名数据 2、空间属性管理 二、数据抓取与处理 1、相关业务表的设计 2、数据抓取处理 3、空间查询分析实践 三、数据成果挖掘 1、省域分布解读 2、技术开发活跃 四、总结 前言 2024年博客之星的评选活动已经过去了一个月&#xf…...

7.3 在通知中显示图片或视频(UNNotificationAttachment)

在iOS通知中显示富媒体内容可以显著提升用户体验。通过UNNotificationAttachment&#xff0c;我们可以为本地和远程通知添加图片、音频、视频等内容。 基本实现方法 1. 创建带附件的通知 func scheduleNotificationWithImage() {// 1. 创建通知内容let content UNMutableNo…...

1.5-APP的架构\微信小程序的架构

1.5-APP的架构\微信小程序的架构 APP的三种开发架构&#xff1a; 原生态APP类型 APP-开发架构-原生态-IDEA 演示&#xff1a;remusic项目源码 NP管理器&#xff1a; http://normalplayer.top/ HttpCanary&#xff1a;https://github.com/mingww64/HttpCanary-SSL-Magisk 安全影…...

Python缩进完全指南:语法规则、使用场景与最佳实践

一、Python缩进的核心概念 Python的缩进不仅是代码风格问题&#xff0c;更是语法的一部分&#xff0c;这是Python区别于其他编程语言最显著的特征之一。 1.1 什么是缩进&#xff1f; 缩进是指在代码行前添加空格或制表符来实现代码块的层级结构。在Python中&#xff0c;缩进…...

高通音频数据从HAL到DSP

概述 参考高通平台8155 从数据流的角度整理下安卓平台音频数据从HAL层到达DSP这个流程; 以 MultiMedia22 --> QUIN_TDM_RX_0 播放为例; 主要关注pcm数据写到dsp, 以及将前后端路由信息告知dsp两个点。 <!-- more --> [Platform:高通 8155 gvmq Android 11] [Ker…...

第六天 开始Unity Shader的学习之Unity中的基础光照之漫反射光照模型

Unity Shader的学习笔记 第六天 开始Unity Shader的学习之Unity中的基础光照之漫反射光照模型 文章目录 Unity Shader的学习笔记前言一、漫反射光照模型1.逐像素光照① 更改v2f② 传递法线信息给片元着色器③ 片元着色器计算漫反射光照模型 二.半兰伯特模型总结 前言 提示&am…...

【RabbitMQ】队列模型

1.概述 RabbitMQ作为消息队列&#xff0c;有6种队列模型&#xff0c;分别在不同的场景进行使用&#xff0c;分别是Hello World&#xff0c;Work queues&#xff0c;Publish/Subscribe&#xff0c;Routing&#xff0c;Topics&#xff0c;RPC。 下面就分别对几个模型进行讲述。…...

【Java设计模式】第3章 软件设计七大原则

3-1 本章导航 学习开辟原则(基础原则)依赖倒置原则单一职责原则接口隔离原则迪米特法则(最少知道原则)里氏替换原则合成复用原则(组合复用原则)核心思想: 设计原则需结合实际场景平衡,避免过度设计。设计模式中可能部分遵循原则,需灵活取舍。3-2 开闭原则讲解 定义 软…...