cubeUnity

如果你曾使用 Unity 制作过游戏,有一些关键差异你需要了解以在 All Out 上入门!


如果你来自 Unity,你会对以下内容感到熟悉 实体 + 组件,一个 层级,一个 检查器,以及可重用的 预制件。最大的思维方式转变是 All Out 游戏是 以多人为先:游戏状态为你同步,并且你大多数逻辑的写法默认就像服务器拥有最终权威一样。

简短说明:与 Unity 的不同之处

  • 多人默认启用:游戏状态会自动从服务器复制到客户端。你通常 编写 RPC、SyncVar 或 Netcode 的生成逻辑。

  • 要有意识地决定代码运行的位置:

    • 使用会影响状态的游戏输入/UI,放在 服务器 + 本地客户端 (见 用于仅本地的 UI/粒子,和 (参见 CSL 编写指南中的模式)。

    • 将纯粹的装饰性逻辑 仅限本地.

  • 避免全局单例状态:多个玩家连接到同一会话。优先将状态存储在玩家或世界组件上。

  • 移动优先:除非你的游戏明确针对 PC,否则避免只假设有键盘。

概念映射(Unity → All Out)

Unity
All Out

Scene

场景(世界)

GameObject

实体

Transform

实体变换(位置/旋转/缩放)

组件 / MonoBehaviour

组件(从 CSL 的 Component)

类派生的类)

Prefab

在编辑器中创建的预制资源

层级窗口

检查器窗口

Instantiate(prefab)

instantiate(prefab_asset) / Start()

尤其是 / ao_update(dt) Update()

生命周期

  • 项目布局:在哪里放“脚本”和“资源”脚本 .csl :你的游戏代码位于 main.csl 文件中。新项目从一个 CSL 入门.

  • 开始,该文件导入引擎并定义生命周期入口点。参见资源 :游戏资源位于你项目的 /res 目录下,并通过路径引用 无需 :游戏资源位于你项目的 前缀(例如: "ui/button.png")。参见 资源与资源管理.

导入(重要差异)

在 Unity 中,每个 C# 脚本都会被编译并且可以使用自己的 using 指令。在 All Out 中,请保持导入集中化:

  • 导入 "core:ao"main.csl

  • 如果你添加了一个文件夹(例如 ui/),请在该文件夹中 导入main.csl

  • 一次

示例:

import "ui" // 可选:将 /scripts/ui 下的所有文件引入作用域

生命周期:MonoBehaviour → CSL 在 Unity 中你通常将一个 MonoBehaviour

  • instantiate(prefab_asset) / 附加到一个 GameObject 并实现:

  • Start() / Awake()

  • LateUpdate()

OnDestroy()

  • 在 CSL 中,你通常会使用: main.csl 全局 proc 在

  • (用于游戏级别的设置)

组件生命周期方法在你的组件上

entity->set_local_position(center + offset); 游戏/帧 生命周期.

有关生命周期模型的更多背景,请参见

预制件:Unity 预制件 → All Out 预制件

  • All Out 预制件在编辑器中创建,可以重复使用或在运行时生成。创建 预制件(Prefabs)

  • :参见:

circle-info

e->set_local_position({10, 5});

预制系统还在发展中。参见预制文档中的限制部分。

“序列化字段”(在检查器中可见的变量) Unity 使用 [SerializeField] @ao_serialize 和公共字段在检查器中公开值。在 CSL 中,使用

damage: int = 10; 检查器 然后在

中将你的组件添加到实体,并为每个实体调整数值。

生成与查询:Instantiate/Find → 场景 API

  • Unity 常用模式: / new GameObject()

  • Instantiate(), FindObjectOfType<T>()

GetComponentsInChildren<T>()

foreach player: component_iterator(My_Player) {

碰撞与触发器:默认“无回调” 如果你习惯于 / OnTriggerEnterOnCollisionEnter

// 检查距离 / 应用效果 / 等等。

多人思维:输入、UI 与“代码运行的位置”

  • 在 Unity 中你通常可以假设“我的客户端拥有我的角色”。在 All Out 中,考虑服务器权威:影响游戏玩法的输入/UI

  • :在能影响权威状态的地方运行(通常是服务器 + 本地客户端)装饰性内容

:仅本地 用于仅本地的 UI/粒子,和 对比 将装饰性逻辑与玩法逻辑分离。.

参见 CSL 编写指南中使用

  • 常见的 Unity → All Out 陷阱单例管理器 :优先使用每个玩家或每个实体的状态,而不是全局的 GameManager

  • 风格单例。导入习惯 main.csl :从

  • 导入引擎和文件夹(不要将导入分散到许多文件中)。假设单人游戏

  • :始终考虑“10 个玩家连接会发生什么?”硬编码的桌面输入方式

接下来去哪儿

最后更新于