3个版本
0.1.3 | 2024年7月22日 |
---|---|
0.1.2 | 2024年7月15日 |
0.1.1 | 2024年6月24日 |
0.1.0 |
|
#202 in 游戏开发
561 每月下载量
用于 4 crates
1MB
18K SLoC
Rust对Godot 4的绑定
网站 | GitHub | 书籍 | API 文档 | Discord | Mastodon | Twitter | 赞助
godot crate将Rust语言与Godot 4集成。
Godot 是一个开源的游戏引擎,专注于高效且全面的2D和3D体验。
其 GDExtension API允许集成第三方语言和库。
哲学
Rust绑定是GDScript的替代品,注重类型安全、可扩展性和性能。
此库的主要目标是提供一个 实用Rust API,供游戏开发者使用。常见的操作应简单且需要最少的模板。API旨在尽可能安全且符合Rust习惯。由于与C++引擎Godot交互,我们有时会采用非常规方法来提供良好的用户体验。
示例
以下代码片段演示了在Rust中编写简单的Godot类 Player
。
use godot::prelude::*;
use godot::classes::{ISprite2D, Sprite2D};
// Declare the Player class inheriting Sprite2D.
#[derive(GodotClass)]
#[class(base=Sprite2D)]
struct Player {
// Inheritance via composition: access to Sprite2D methods.
base: Base<Sprite2D>,
// Other fields.
velocity: Vector2,
hitpoints: i32,
}
// Implement Godot's virtual methods via predefined trait.
#[godot_api]
impl ISprite2D for Player {
// Default constructor (base object is passed in).
fn init(base: Base<Sprite2D>) -> Self {
Player {
base,
velocity: Vector2::ZERO,
hitpoints: 100,
}
}
// Override the `_ready` method.
fn ready(&mut self) {
godot_print!("Player ready!");
}
}
// Implement custom methods that can be called from GDScript.
#[godot_api]
impl Player {
#[func]
fn take_damage(&mut self, damage: i32) {
self.hitpoints -= damage;
godot_print!("Player hit! HP left: {}", self.hitpoints);
}
}
更多信息
依赖项
~3.5–6MB
~142K SLoC