iT邦幫忙

2023 iThome 鐵人賽

DAY 7
0

什麼是 ECS(Entity-Componet-System)

ECS跟常見的OOP(Object Oriented Programming)物件導向不同而是DOP(Data Oriented Programming)資料導向,ECS FAQ

為什麼需要 ECS:

  • 模組化和解耦:可以將遊戲中的資料和邏輯分離,使開發更具有組織性。
  • 效能優化:當遊戲中有大量互動物件時,ECS可以使遊戲更加流暢。

ECS的三個主要部分:

  • Entity:遊戲中的每個物件或角色。
  • Component:描述實體特性的資料(例如速度、位置)。
  • System:執行遊戲邏輯,如移動或碰撞檢測。

舉例遊戲:

想像一個簡單的賽車遊戲。每輛車(Entity)都有速度(Component)和位置(Component)。當車輛移動時,一個系統(例如"移動系統")會根據速度更新車輛的位置。

Bevy 和 ECS:

Bevy:Bevy是使用Rust語言並採用了ECS概念的遊戲引擎。
以上面的舉例用Bevy開發應該會是

use bevy::prelude::*;

// 定義一個車輛組件
struct Car {
    speed: f32,
}

// 定義一個移動系統
fn move_system(mut query: Query<(&Car, &mut Transform)>) {
    for (car, mut transform) in query.iter_mut() {
        transform.translation.x += car.speed;
    }
}

fn main() {
    App::build()
        .add_startup_system(setup.system())
        .add_system(move_system.system())
        .run();
}

fn setup(commands: &mut Commands) {
    commands.spawn((Car { speed: 2.0 }, Transform::from_translation(Vec3::new(0.0, 0.0, 0.0))));
}

上一篇
[Day 6] Rust 學習3
下一篇
[Day 8] 什麼是Roguelike類型的遊戲呢?
系列文
三十歲時在做什麼?有沒有空?可以來做遊戲嗎?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言