Cave: はじめてのガイド
エンジンのアーキテクチャと用語
Lesson 5 of 19 • 10 XP
Keep your place in this quest
Log in or sign up for free to subscribe, follow lesson progress, and access more learning content.
Caveは学ぶのが簡単に設計されていますが、それでも理解する必要があるいくつかの重要な概念があります。
このレッスンでは、エディターの至る所で見るコアとなる言葉について説明します:シーン、エンティティ、コンポーネント、アセット、エンティティテンプレート、トランスフォーム、リジッドボディ、キャラクターコンポーネント、Pythonコンポーネント、ロジックブロック、タイムライン、ランタイム。
これは全体の概要であり、各単語の詳細には立ち入っていませんが、エンジンの理解を深めるために重要です。これらの言葉が理解できるようになると、エンジンの残りの部分はずっと読みやすくなります。
大きな視点
ほとんどのCaveプロジェクトは、いくつかの繰り返しのアイデアから構築されます:
| 概念 | 簡単な意味 |
|---|---|
| シーン | レベル、メニュー、テストエリア、プレイ可能な空間。 |
| エンティティ | シーン内のオブジェクト。 |
| コンポーネント | エンティティに付随する機能。 |
| アセット | アセットブラウザに保存される再利用可能なプロジェクトコンテンツ。 |
| エンティティテンプレート | プレハブに似た再利用可能なエンティティ設定。 |
例えば、レベル内の木製の箱を想像してみてください:

- レベルは
シーンです。 - レベルに配置された箱は
エンティティです。 - 箱の位置はその
トランスフォームに保存されています。 - 可視モデルは
メッシュコンポーネントによって処理されます。 - 衝突は
リジッドボディコンポーネントによって処理できます。 - 箱によって使用されるモデル、マテリアル、テクスチャは
アセットです。
その箱の設定を多くのシーンで再利用したい場合は、それをエンティティテンプレートとして保存できます。
シーン
シーンはエンティティの集合です。
シーンは以下の用途に使用できます:
- ゲームレベル。
- メニュー。
- テストマップ。
- プロトタイプルーム。
- カットシーンのスペース。
アクティブなシーンのみがメイン3Dビューで編集されます。ゲームをテストすると、Caveはエディターのコンテンツだけではなく、シーンをゲームプレイとして実行します。
プロジェクトをランタイムとしてエクスポートまたはテストする際、プロジェクト設定がスタートアップシーンとして使用されるシーンを決定します。これを変更するには、設定タブに移動します。
エンティティ
エンティティはシーン内のオブジェクトです。
エンティティは可視または不可視であり、シンプルまたは複雑であることがあります。
エンティティの例:
- プレイヤーキャラクター。
- ドア。
- カメラ。
- ライト。
- トリガー。
- UIボタン。
- スポーンポイント。
- 組織用のフォルダー。
エンティティ自体は主にコンテナです。それが実際にできることは、付随するコンポーネントに依存します。
コンポーネント
コンポーネントはエンティティに振る舞いやデータを追加します。
すべての可能なものに対して1つの巨大なオブジェクトタイプを持つのではなく、Caveはコンポーネントを組み合わせてエンティティを構築することを許可します。そして、これがゲームのさまざまな要素を構築するための方法です。複数の異なるコンポーネントタイプを持つエンティティを合成することによって。
例えば:
| エンティティ | 可能なコンポーネント |
|---|---|
| 固定された壁 | トランスフォーム、メッシュ、リジッドボディ。 |
| プレイヤー | トランスフォーム、キャラクター、カメラ、Python。 |
| ドア | トランスフォーム、メッシュ、リジッドボディ、Pythonまたはロジックブロック。 |
| ポイントライト | トランスフォーム、ライト。 |
| UIボタン | UI要素。 |
これがCaveで最も重要な考えの1つです:エンティティはコンテナです。コンポーネントはそれに機能を与えます。
ここで言及することが重要なのは、さまざまなオブジェクトタイプを構成する別の方法は、子エンティティ階層内で複数のエンティティを使用することです。
エンティティの命名
新しいエンティティを作成すると、Caveはフォルダー、空、メッシュ、ポイントライト、カメラ、UI要素、テキスト、ボタンなどの異なるスターティングタイプを提供します。
これらは完全に別の世界ではありません。それらは便利なスターティングポイントです。
例えば:
空はトランスフォームを持つ基本的なエンティティです。メッシュエンティティはメッシュを表示するために準備されたエンティティです。ポイントライトエンティティはライトとして機能するために準備されたエンティティです。カメラエンティティはビューをレンダリングするために準備されたエンティティです。フォルダーは主に組織に使用されるエンティティです。
通常、後でコンポーネントを追加、削除、または編集できますので、スターティングタイプは単なる便利なショートカットです。
トランスフォーム
トランスフォームはCaveにエンティティの場所と向きを示します。
これには:
- 位置。
- 回転。
- スケール。
ほとんどのシーンエンティティはトランスフォームを持っています。なぜなら、ほとんどのオブジェクトは世界のどこかに存在する必要があるからです。ギズモを使ってエンティティを移動、回転、またはスケールする際には、そのトランスフォームを編集しています。エンティティが別のエンティティに親子関係にある場合、そのトランスフォームはその階層に対して評価されます。
アセット
アセットはアセットブラウザに保存される再利用可能なプロジェクトコンテンツです。エンティティが内部でアセットとして考えられている一方、アセットはエンティティと同じではないことを強調することが重要です。
例えば:
- メッシュアセットはモデルデータです。メッシュエンティティは、そのメッシュアセットを使用するシーンに配置されたオブジェクトです。
- マテリアルアセットは表面の見た目を定義します。メッシュエンティティはそのマテリアルを参照できます。
- Pythonスクリプトアセットはコードを含みます。Pythonコンポーネントはそのスクリプトを使用できます。
この分離は強力であり、1つのアセットが何度も再利用される可能性があることを意味します。10個の箱が同じマテリアルを使用している場合、マテリアルアセットを編集すると、それらすべてを更新できます。
エンティティテンプレート
エンティティテンプレートは再利用可能なエンティティ設定です。以下のスクリーンショットを確認してください。エンティティテンプレートアセットは、そのサムネイルの下に緑のラインでマークされています:

他のエンジンから来た場合、プレハブに似ていると考えることができます。
エンティティテンプレートには以下を保存できます:
- エンティティ階層。
- コンポーネント。
- コンポーネント設定。
- アセット参照。
- 子エンティティ。
再利用したいものすべてに便利です:
- 敵。
- ピックアップアイテム。
- ドア。
- プロップ。
- 車両。
- UIウィジェット。
- ゲームプレイオブジェクト。
同じオブジェクトを何度も再構築する代わりに、エンティティテンプレートとして1度作成し、必要に応じてインスタンスを配置します。
リジッドボディ
リジッドボディはエンティティに物理的な挙動を与えます。これはオブジェクトが衝突または物理的な移動を必要とする場合に使用されます。
例:
- プレイヤーをブロックする箱。
- 転がることができるボール。
- 衝突を持つドア。
- プレイヤーが通り抜けられない壁。
リジッドボディはエンジンの物理的側面の一部です。オブジェクトが物理的に世界と相互作用する必要があるときに使用します。
キャラクターコンポーネント
キャラクターコンポーネントはキャラクター様式の移動に使用されます。これは通常のリジッドボディとは異なり、キャラクターには特別な挙動が必要です:
- 歩行。
- 壁に沿って滑ること。
- スロープの処理。
- ジャンプ。
- プレイヤー入力への応答。
プレイヤーやNPCの場合、キャラクターコンポーネントは基本的な物理オブジェクトがキャラクターのように振る舞うよりも、通常はより良いスタートポイントです。
Caveでキャラクターコンポーネントについて話すときは、そのキャラクター物理を指しており、ゲーム固有のロジック(移動など)ではありません。
タグとプロパティ
タグとプロパティはエンティティを識別し、設定するのに役立ちます。
- タグは、スクリプトやロジックが物事を見つけてカテゴライズするのを助けるラベルです。
- プロパティはエディターに表示される編集可能な値です。これにより、毎回コードを書き換えることなく挙動を調整できます。
例えば、敵には以下のようなプロパティがあるかもしれません:
- 歩行速度。
- ヘルス。
- 攻撃距離。
- パトロールターゲット。
プロパティの良い使用はゲームの調整を簡単にします。
プロパティはエンティティに限定されません:シーン、ロジックブロック、その他のアセットにもそれらがあります。
Caveでプロパティについて話すときは、コードを通じてPython辞書を使用してアクセスできるプロパティを指しています。これらはほぼ常にエディターでも利用可能です。
Pythonコンポーネント
Pythonコンポーネントは、エンティティがPythonロジックを実行できるようにします。
これは、次のようなカスタム挙動を必要とする場合に便利です:
- ドアを開く。
- プラットフォームを移動させる。
- プレイヤー入力を処理する。
- オブジェクトを生成する。
- UIテキストを更新する。
- イベントをトリガーする。
PythonコンポーネントはCaveでゲームプレイをプログラムする主な方法の1つです。
Pythonコードコンポーネント
Pythonコードコンポーネントは、コードがコンポーネント内に直接保存されているときに使用されます。これは迅速なテスト、小さな挙動、またはプロトタイプに便利です。
より大きなゲームプレイシステムの場合、別のPythonスクリプトアセットは通常、整理と再利用が容易です。
ロジックブロック
ロジックブロックは、ロジックを構築する視覚的な方法です。これにより、Pythonコードを直接書かずに挙動を作成したい場合に便利です。
UnrealのBlueprintsを知っている場合、ロジックブロックは類似のアイデアのファミリーにあります:テキストとしてすべてを書くのではなく、視覚的にロジックを接続します。
ロジックブロックは、Pythonコードを書くことなくさまざまなタイプのロジックを作成するのに特に便利です。例えば、ゲームプレイイベントやロジック、オブジェクトの挙動、システムを接続すること、トリガーなど。
これについては、後でこのガイドで学ぶことになります。
タイムライン
タイムラインは、作成されたシーケンスに使用されるアセットです。タイムラインは時間に対して物事をアニメーションさせたりトリガーしたりすることができます。
タイムラインは以下の用途に便利です:
- カットシーン。
- カメラ移動。
- スクリプト化されたイベント。
- 協調されたゲームプレイシーケンス。
タイムラインはすべてのゲームに必須ではありませんが、特定の作成された順序で何かを起こしたい場合に便利です。
重要: タイムラインは個々のアニメーション編集の手段ではなく、キャラクターのウォークサイクルアニメーションを編集するなどの目的には、Blenderなどの専門的なDCCソフトウェアを使用し、その後Caveにインポートする必要があります。
プレイヤーとゲームランタイム
- Cave Editorはプロジェクトを構築する場所です。
- Cave Playerはゲームを実行するランタイムです。
エディターでPlayを押すと、Caveはエディター内でゲームのようなモードでシーンを実行します。スタンドアロンのランタイムとしてテストすると、Caveは別のプレイヤーウィンドウでゲームを起動します。
最終的にエクスポートされたゲームは、エディタではなくプレイヤー/ランタイムビルドとして実行されます。この分離は重要です。なぜなら、いくつかのものはエディタ専用で(プロジェクトをデバッグおよび/または開発するために使用)、他のものは実際のゲームの一部であるからです。
最も重要な関係
このレッスンから一つだけ覚えておくべきことがあるとすれば、それは次のことです:
シーンにはエンティティが含まれ、エンティティにはコンポーネントが含まれ、コンポーネントはしばしばアセットを使用します。
これがCaveプロジェクトの骨組みです。