Keep your place in this quest

Log in or sign up for free to subscribe, follow lesson progress, and access more learning content.

Caveは学びやすさを重視して設計されていますが、理解しておくべき重要な概念がいくつかあります。

このレッスンではエディターの至るところで目にするコアな用語について説明します:scene、entity、component、asset、entity template、transform、rigid body、character component、Python component、logic brick、timeline、runtime。

これは概要説明であり、それぞれの用語の詳細には踏み込んでいませんが、エンジンの理解を深めるためにぜひ知っておきたい内容です。これらの言葉の意味がわかると、他の部分の理解もずっと楽になります。

大まかな全体像

ほとんどのCaveプロジェクトは、いくつかの繰り返し使われる基本的な概念から成り立っています:

概念 簡単な意味
Scene レベル、メニュー、テストエリア、またはプレイ可能な空間です。
Entity シーン内のオブジェクトです。
Component Entityに付加される機能です。
Asset Asset Browserに保存された再利用可能なプロジェクトコンテンツです。
Entity Template Prefabに似た、再利用可能なentityのセットアップです。

例えば、レベル内の木製のクレートを想像してください:

image.png

  • レベルはSceneです。
  • レベル内に置かれたクレートはEntityです。
  • クレートの位置はTransformに保存されています。
  • 見た目のモデルはMesh Componentで扱われます。
  • 衝突はRigid Body Componentで処理されることがあります。
  • クレートで使われているモデル、マテリアル、テクスチャはAssetsです。

そのクレートのセットアップを複数のシーンで使いたい場合は、Entity Templateとして保存できます。

Scene

シーンはentityの集合体です。

シーンは以下の用途に使われます:

  • ゲームレベル
  • メニュー
  • テストマップ
  • プロトタイプの部屋
  • カットシーン用空間

メインの3Dビューで編集されるのはアクティブなシーンのみです。ゲームをテストするときは、Caveがシーンをゲームプレイとして実行します。

プロジェクトをエクスポートまたはランタイムとしてテストするとき、プロジェクト設定でどのシーンをスタートアップシーンに使うかが決まります。これらの設定はSettings Tabで変更可能です。

Entity

Entityはシーン内のオブジェクトです。

Entityは表示されるものもあれば、非表示のものもあります。単純なものから複雑なものまでさまざまです。

Entityの例:

  • プレイヤーキャラクター
  • ドア
  • カメラ
  • ライト
  • トリガー
  • UIボタン
  • スポーンポイント
  • 管理用のフォルダー

Entity自体は主にコンテナであり、実際にできることは付加されたコンポーネントによります

Component

ComponentはEntityに動作やデータを追加します。

すべての機能を持つ巨大なオブジェクトタイプを作るのではなく、Caveはコンポーネントを組み合わせてEntityを作ります。ゲームのさまざまな要素も、この方法で異なる種類のコンポーネントを組み合わせて作成します。

例えば:

Entity 可能なコンポーネント
静的な壁 Transform、Mesh、Rigid Body
プレイヤー Transform、Character、Camera、Python
ドア Transform、Mesh、Rigid Body、PythonまたはLogic Bricks
ポイントライト Transform、Light
UIボタン UI Element

これがCaveで最も重要な考え方の一つです。Entityはコンテナであり、Componentが機能を与えます。

また複数のEntityを子Entity階層で使うことも、異なるオブジェクトを構成する別の方法として重要です。

Entityの名称

新しいEntityを作成するとき、CaveはFolder、Empty、Mesh、Point Light、Camera、UI Element、Text、Buttonなどの開始タイプを提供します。

これらは完全に別物ではなく、便利なスタートポイントです。

たとえば:

  • EmptyはTransformのみの基本的なEntityです。
  • Mesh Entityはメッシュ表示用に準備されたEntityです。
  • Point Light Entityはライト用に準備されたEntityです。
  • Camera EntityはビューをレンダリングするためのEntityです。
  • Folderは主に整理用のEntityです。

通常、後からコンポーネントの追加、削除、編集が可能なので、開始タイプはあくまで便利なショートカットです。

Transform

TransformはEntityの位置と向きをCaveに伝えます。

内容は以下の通りです:

  • 位置
  • 回転
  • スケール

ほぼすべてのシーンのEntityはTransformを持ちます。なぜなら、ほとんどのオブジェクトは世界のどこかに存在する必要があるからです。ギズモを使ってEntityを移動、回転、スケールするときはTransformを編集しています。Entityが他のEntityに親子づけされている場合、Transformはその階層に対して相対的に評価されます。

Asset

AssetはAsset Browserに保存された再利用可能なプロジェクトコンテンツです。Entity自体も内部的にはAssetと見なされますが、AssetはEntityと同じものではありません。

例えば:

  • メッシュAssetはモデルデータです。メッシュEntityはそのメッシュAssetを使用してシーンに配置されるオブジェクトです。
  • マテリアルAssetは表面の見た目を定義します。メッシュEntityはそのマテリアルを参照します。
  • PythonスクリプトAssetはコードを含みます。Pythonコンポーネントはそのスクリプトを使用できます。

この分離は強力で、一つのAssetを何度も再利用できます。十個のクレートが同じマテリアルを使っていれば、そのマテリアルAssetを編集すると全部まとめて更新されます。

Entity Template

Entity Templateは再利用可能なEntityのセットアップです。下のスクリーンショットをご覧ください。Entity Template Assetはサムネイルの下に緑色のラインがあります:

image.png

他のエンジンから来た人は、Prefabに似ていると考えてよいです

Entity Templateは以下を保存できます:

  • Entity階層
  • コンポーネント
  • コンポーネント設定
  • Asset参照
  • 子Entity

何度も使いたいものに便利です:

  • アイテム
  • ドア
  • 小道具
  • ビークル
  • UIウィジェット
  • ゲームプレイオブジェクト

同じオブジェクトを何度も作り直す代わりに、一度Entity Templateとして作って、必要な場所にインスタンス化して使います。

Rigid Body

Rigid BodyはEntityに物理的な動作を与えます。衝突や物理的な動きが必要な場合に使われます。

例:

  • プレイヤーを塞ぐクレート
  • 転がるボール
  • 衝突を持つドア
  • プレイヤーが通れない壁

Rigid Bodyはエンジンの物理側の要素で、オブジェクトが世界と物理的に相互作用するときに使います。

Character Component

Character Componentはキャラクターの動きを扱います。通常のRigid Bodyとは異なり、キャラクターは特別な動作を必要とします:

  • 歩行
  • 壁に沿った滑り
  • 斜面の処理
  • ジャンプ
  • プレイヤー入力への応答

プレイヤーやNPCの場合、基本的な物理オブジェクトでキャラクターを作ろうとするより、Character Componentを使うほうが一般的には適しています。

CaveでCharacter Componentと言ったときは、キャラクターフィジックス(動きや物理挙動)を指しており、ゲーム固有のロジック(例えば移動操作など)を含むわけではありません。

タグとプロパティ

タグとプロパティはEntityの識別や設定に役立ちます。

  • タグはスクリプトやロジックが対象を見つけたり分類したりするためのラベルです。
  • プロパティは編集可能な値で、エディター上で動作をコードを書き換えずに調整できます。

例えば、敵には以下のようなプロパティがあるかもしれません:

  • 歩行速度
  • 体力
  • 攻撃距離
  • 巡回対象

プロパティを上手く使うことで、ゲームの調整が楽になります。

プロパティはEntityに限らず、Scene、Logic Bricks、その他のAssetにも使われます。

Caveでプロパティと言う場合、Pythonの辞書でアクセス可能な値を指すことが多く、エディター上でもほぼ常に利用可能です。

Python Component

Python ComponentはEntityにPythonロジックを走らせることを可能にします。

カスタムの動作が必要なときに便利です。例えば:

  • ドアを開ける
  • 足場を動かす
  • プレイヤー入力を処理する
  • オブジェクトをスポーンさせる
  • UIテキストを更新する
  • イベントをトリガーする

Python ComponentはCaveでゲームプレイをプログラムする主な方法の一つです。

Python Code Component

Python Code Componentはコードがコンポーネント内に直接保存され、別スクリプトAssetとしてリンクされていない場合に使います。手早いテストや小規模な動作、プロトタイプに便利です。

大規模なゲームプレイシステムでは、分離されたPythonスクリプトAssetのほうが整理や再利用がしやすいです。

Logic Brick

Logic Bricksは視覚的にロジックを組み立てる方法です。Pythonコードを書かずに動作を作りたいときに役立ちます。

UnrealのBlueprintsと似た考え方で、テキストで書くのではなく視覚的にロジックを繋いで作成します。

Pythonコードを書かずにゲームプレイイベント、オブジェクト動作、システムの連携、トリガーなど任意のロジックを作るのに特に有効です。

このガイドの後半で詳しく学びます。

Timeline

Timelineは作者が作成するシーケンス用のAssetです。時間経過に沿ってアニメーションやトリガーを実行します。

用途:

  • カットシーン
  • カメラ移動
  • スクリプトイベント
  • ゲームプレイの調整されたシーケンス

すべてのゲームに必須ではありませんが、特定の順序で何かを起こしたいときに便利です。

重要: Timelineは個別のアニメーション編集(例えばキャラクターの歩行サイクル編集)用ではありません。その場合はBlenderなどのDCCソフトで編集し、Caveにインポートしてください。

PlayerとGame Runtime

  • Cave Editorはプロジェクトを作るための場所です。
  • Cave Playerはゲームを動かすランタイムです。

エディター上でPlayを押すと、Caveがシーンをゲームのように動かします。スタンドアロンのランタイムとしてテストするときは、別ウィンドウでゲームが起動します。

最終的にエクスポートされたゲームは、エディターではなくプレイヤー/ランタイムビルドとして実行されます。この分離は重要です。なぜなら、一部はエディター専用(プロジェクトのデバッグや開発用)で、他は実際のゲームの一部だからです。

最も重要な関係

このレッスンで一つだけ覚えておいてほしいことがあるとすれば、それはこれです:

シーンはエンティティを含み、エンティティはコンポーネントを含み、コンポーネントはしばしばアセットを使用する。

これがCaveプロジェクトのバックボーン(骨格)です。