オススメ機能
Twitter
お気に入り
記事履歴
ランキング
お気に入りタイトル/ワード

タイトル/ワード名(記事数)

最近記事を読んだタイトル/ワード

タイトル/ワード名(記事数)

LINEで4Gamerアカウントを登録
完全図解,無償配布のUnrealEngine 3開発キットで3Dゲームを作ってみよう
特集記事一覧
注目のレビュー
注目のムービー

メディアパートナー

印刷2009/12/28 16:49

紹介記事

完全図解,無償配布のUnrealEngine 3開発キットで3Dゲームを作ってみよう

Index
基本操作
立体に素材を貼っていく
レベル作成:もう少し作り込むためには
いろいろな物体を配置する
屋外の地形を作る
地形にマッピング:マテリアルを作る
地面に木や岩を配置しよう
空をつけよう
平行光源を回転する
SpeedTreeを使う
SpeedTreeで作った木をUDKに取り込む
もっといろんなものを置きたい:インポート処理
Botを出現させる
Botに攻撃させてみる
Botを制御してみる
複数のBotを出現させる
Botを移動させる
Third Person Viewにする
仕掛けを作る:物体を動かす
Triggerを使う
物体を移動する:アニメーションエンジンMatinee
ゲームができちゃった場合:ライセンスは?

仕掛けを作る:物体を物理的に動かす


 とりあえず,敵も出て攻撃してきてということで,FPSについてはゲームの概略のめどが立ったところですが,FPSだけでは面白くないですよね。
 いろいろレベルを作り込むことと同時に,いろんな仕掛けを作ってみましょう。
 その第1弾として,物体を動かすことから始めます。
 すでに述べたように,レベルを構成する基本となるBSPブラシで作った壁や天井などは基本的に動きません。StaticMeshで読み込んだものも標準状態では動きませんが,物理エンジンの管理下に置くことで動かすことができるようになります。

 まず,床と照明だけの簡単なレベルを作って,球体を置いてみましょう。BSPブラシで作った球体ではなく,コンテンツブラウザから読み込んだStaticMeshのものです。 

Unreal Engine
適当なレベルを作ってコンテンツブラウザから球体をドラッグ&ドロップします
Unreal Engine
適当な大きさに縮小しておいてください

 しかし,このままではまったく動きません。

銃で撃っても,体当たりしても動きません
Unreal Engine Unreal Engine

 そこで,その球体を選択したうえで右クリックメニューを開き[アクタを置換]してやります。一覧のなかから[Add RigidBody]を選びます。

Unreal Engine

 これで球体が物理運動をするようになります。

銃で撃つと動くようになったけど,プレイヤーが押しても動きません
Unreal Engine Unreal Engine

 銃で撃つと,球が跳ね飛んでいくことが分かります。
 ところが,プレイヤーがぶつかってもびくともしません。ここは,なにか設定個所はあるのだろうと思いますが,見つけられませんでした。そもそも接触判定が発生していないように思われます。
 跳ね方にしても,どこかで物理設定をいじれそうなものですが,現状では設定する場所を確認できていません。今後の課題です。


Triggerを使う


 さて,では仕掛けを動かすためのきっかけとなるイベントにはどんなものがあるのでしょうか。これはKismetのメニューでの[新しいイベント]を見れば分かりますが,どれもがすぐ使えるわけでもありません。比較的簡単に使えそうな者を抜き出してみましょう。

●Actor
  • Destroyed
  • Take Damage

 アクタとして扱われているものが,壊れたり,ダメージを受けた場合に発生します。

●AI
  • Reached Route Actor
  • See Enemy

 Botが,指定された地点まで到達した場合や敵を発見した場合に発生します。

●ゲーム系
  • Game Ended
  • Level Loaded
  • Level Startup

 それぞれゲームが終了した,レベルデータのロードが完了した,ゲームが始まったというタイミングで発生します。ロード完了直後では,動的に発生させたオブジェクトがありませんし,ゲームが開始されてからでは,ゲーム内で使うオブジェクトの生成は遅すぎます(まあ,ほとんど問題になることはないでしょうけど)。似たタイミングのイベントですが,使い分けてください。

●Pawn
  • Death
  • Get Inventory
  • Line Of Sight
  • See Death

 Botやプレイヤーの動作によるものです。死んだ場合,アイテムを拾った場合,視界内にいる場合,ほかのBotが視界内で死んだ場合です。

●Physics
  • Constraint Broken
  • Hit Wall
  • Projectile Landed
  • Rigid Body Collision
  • Touch

 物理的な現象によるイベントです。順に,動きの制約が解放されたとき,壁にぶつかったとき,射出物が着弾したとき,剛体の衝突が起きたとき,プレイヤーなどによる接触があったときに発生します。BSPメッシュなどは壁扱い,RigidBodyアクタなど剛体系の物理運動をするもの,さらにプレイヤーが絡んだものに分かれることが分かります。
 ただ,TouchイベントはStaticMeshに対しても指定できるのですが,私は適切に動作させることに成功しておりません。

●Player
  • Player Spawned

 プレイヤーが出現したタイミングです。

 FPS以外のゲームでよく使いそうなものに「物体に触れたら」という条件があるのですが,前述のとおり,StaticMesh(要するに画面内に置きそうなオブジェクト)ではTouchイベントの発生に成功しておりません。公式Forumの雰囲気ではプロパティでCollide ComplexやNo Encroach Checkをいじればできそうな感じではありましたが,動きません。エラーメッセージからすると,指定できないような気はするのですけど……。

 少なくともデフォルトだとプレイヤーとの接触が適切に判定されていないようですので,この球体と確実に接触を判定できるようにしてみましょう。公式サイトなどのチュートリアルでも多出しているTriggerオブジェクトを使用してみます。

 床の上で右クリックしてメニューを開き,[アクタを追加]−[Add Trigger]を選択します。

Unreal Engine

 画面にスイッチ状のアイコンが表示されます。Cキーを押すと,当たり判定範囲が表示されます。とくに変更の必要はありませんが,Cキーの操作を覚えておいてください。

 F4でプロパティを開き,「Display」の「Hidden」指定を切っておきます(切らなくても動作には支障ありませんが)。 

Unreal Engine

動作は設定されていませんが,実行するとTriggerが表示されます
Unreal Engine

 今回は,触れるとNoteの位置にテレポートする処理を作っていきます。トリガーの確認用ですので,動作はなんでもよいのですが,簡単に設置できて効果が分かりやすいので,ここではテレポートを使ってみました。
 下準備として,コンテンツブラウザを開き,Actorクラス一覧に切り換えてNoteを選んで床に置きます。

適当な位置にNoteを置いておいてください
Unreal Engine

 Triggerを選択した状態でKismetを開いて,Trigger_0を起点としたイベントを発生させます。

Unreal Engine

 新しいアクションでテレポートを選択します。[新しいアクション]−[Actor]−[Teleport]です。

Unreal Engine

動作対象となるオブジェクトにプレイヤーを指定します
Unreal Engine

Noteを選択したうえでメニューを開くと,移動先が指定できます
Unreal Engine
 
完成図
Unreal Engine

 この状態で実行すると,スイッチに触れるとキャラクターがテレポートするようになります。

テレポートしたところ。図はテレポート後に振り向いた場面です
Unreal Engine
 
 では,Kismetを一度閉じ,三面図を良く見て,球体とTriggerが重なるように配置しなおしてください。
 
Unreal Engine

 ここで,Kismetを開きます。三人称視点にしたときの要領で,ボールとTriggerをくっつけてみましょう。[新しいアクション]−[Actor]−[Attach To Actor]を選択して,処理をつなぎます。

Attach To Actorを呼び出します。ボールとTriggerをそれぞれ選んでおいて,新規の変数を追加しておいてください
Unreal Engine

全体的な処理の開始イベントを作り,処理をつないでやります
Unreal Engine

処理の全体図です
Unreal Engine

 再生します。ボールが転がると,一緒にTriggerも転がりますので,これで移動する物体での接触判定も取れるようになりました。

Unreal Engine

 静止した物体にはTriggerをそのまま置いて,動く物体にはAttachしてと,多くの状況でイベントを使えることが確認できました。


物体を移動させる:アニメーションエンジンMatinee

 
 次に,物理運動ではなく,物体をプログラムで移動させてみましょう。チュートリアルムービーのSimple Levelなどでも出てくる操作ですが,ここでまとめ直しておきます。

 先ほどと同じように適当なレベルを作って(ここでは同じレベルを流用しています),今度はStaticMeshの立方体を追加してください。
 ただし,ここで立方体のところで右クリックメニューを開いて,[アクタを置換]−[add Mover]を選んでおいてください(重要)。

立方体のアクタの種類をMoverに変更します
Unreal Engine

 あらかじめ立方体を選択しておいてから,Kismetを開き,起動条件としてLevel Startupを入れておきます。ここで右クリックメニューから[New Matinee]を選択してください。

右クリックメニューからMatineeを追加します
Unreal Engine

 Matinee(マチネー)というのは,フランス語で午前中の意ですが,一般的には芝居などで昼間の興業のことを指します。夜中に行われるソワレと対になっています。昼興業と夜興業ではなにが違うかというと,主に客層が違うようで,マチネアイドルという言葉は女性に人気の二枚目俳優の意味とのこと。まあ,余談はいいんですが,要するに芝居関係の単語です。UDKでは,アニメーションエンジンの名前になっています。
 Matineeでは,タイムライン上にキーフレームを設定して,その間を補間するようなアニメーションを簡単に作れます。

 立方体を選択したままMatineeを開くと,立方体用のデータが一緒に作られていることを確認してください。

Matineeのブロック図が出てきます。とりあえず,Playに処理をつないでください
Unreal Engine

 では,ダブルクリックでMatineeを開きます。
 下側にあるタイムラインの左エリアで右クリックし,[空のグループを新規追加]します。名前は動作を示したものを付けておいてください。

Unreal Engine

ここで指定したものがKismetに表示されますので,動作を示した名前を付けてください
Unreal Engine

 新しくできたラインにカーソルを載せて右クリックメニューで[動作トラックを新規追加]します。

Unreal Engine

 タイムラインの0.00のところに,茶色の小さな三角が追加されているのが分かります。この印があるところが,位置/動作の登録されたキーフレームとなります。

 タイムラインの数字が書いてある部分で,0.00のところに少し太い縦バーがあることを確認してください。これをつかんで適当な秒数のところまで移動させます。
 移動させたら,そこに新しいキーフレームを作りましょう。キーボードからEnterキーを押してください。なんでGUIで指定できないのかさっぱり分かりませんが,ここはEnterです。

 次に,パース図か三面図で物体を好きな位置に移動させてください。前のフレームの位置から移動終了位置まで,直線的に移動するようなアニメーションが指定できます(曲線補間も可能ですが)。

Enterキーを押すとキーフレームが追加されますので,物体を目的位置に移動させます
Unreal Engine

 再生してみましょう。すーっと立方体が平行移動していきます。

Unreal Engine

 StaticMeshのままでは,Matineeで移動できません。あらかじめMoverに置換しておくことが重要です。

 Matineeでは,こういった単純な物理運動だけではなく,さまざまな動作を指示できます。ただ,現時点では移動と表示/非表示の切り換えくらいしか簡単に使えそうなものを見つけていないのですが……。適用する相手のオブジェクト種類など,少し制約がありそうです。


ゲームができちゃった場合:ライセンスは?


 割と高いことで知られるUE3のライセンス料ですが,UDKは無償配布ということもあってか,同人ソフトなど,大きな会社でない場合でも,ある程度現実的なライセンスが用意されているようです。

 ライセンスにはいくつかのパターンがあり,そのうち小規模ゲーム販売に対応してそうなものを紹介しておきます。翻訳に誤りなどがあるかもしれませんので,実際に適用したいという人は必ず原文を確認してください。
 まず,開発期間の使用は無償です。発売が決定した時点で99.99ドルをEpic Gamesに支払います。売り上げの最初の5000ドル分までは無償,以降は売上高に対して25%のロイヤリティがかかります。
 個人相手にはやってないみたいなので,決まったら,まず会社を作れということのようですが,プログラミングができなくても高品質グラフィックスが実現できますので,CGデザイナー系の人にいいんじゃないかという気がします。同人ソフト作家の人は,世間の度肝を抜くようなタイトルに挑戦してみるのも面白いかと思います。

 さて,年末企画ということで一気に連載5回分くらいのボリュームで流してきましたが,まだまだUDKの上っ面のさらに一部にすぎません。公式サイトでは日本語コンテンツも用意されているのですが,リファレンス部分もぱっと見で見方がよく分からないものですのであまり役に立たないような気はします。公式サイトのチュートリアルビデオは分かりやすくて非常に貴重なのですが,いきなり複雑な作り込みをしている部分などもありますので,まず,少しツールを触ってみて,だいたいの感触をつかんでからチュートリアルビデオを見ることをお勧めします。
 UDKを使ってみた感想ですが,「ViZiMO」の100倍凄いモノといった感じでした。似た部分も多いのですが、作り込みなどはいくらでも加えられるのでビジュアル面では凄いゲームが作れます。ただ,できることが多いのはともかく,分かりにくい部分も多いのは確かです。単にゲームを作るだけならViZiMOのほうが100倍は速く作れます。高機能だから分かりにくいんじゃなくて,単に分かりにくい部分が結構あります。両者の中間くらいの環境があるといいんですけどねえ……。

 とにかく,今回はできるだけ分かりやすく解説してみました。プログラミングのできない人でも正月休みをつぶせるくらいはたっぷり遊べますので,ぜひこの機会にUDKに挑んでみてください。


●UDK 公式ページ(日本語)
http://udn.epicgames.com/Three/DevelopmentKitHomeJP.html

●ビデオチュートリアル
http://udn.epicgames.com/Three/VideoTutorials.html

●ユーザーの作成したゲーム例(Forum)
http://forums.epicgames.com/forumdisplay.php?f=368

●Index
基本操作
立体に素材を貼っていく
レベル作成:もう少し作り込むためには
いろいろな物体を配置する
屋外の地形を作る
地形にマッピング:マテリアルを作る
地面に木や岩を配置しよう
空をつけよう
平行光源を回転する
SpeedTreeを使う
SpeedTreeで作った木をUDKに取り込む
もっといろんなものを置きたい:インポート処理

Botを出現させる
Botに攻撃させてみる
Botを制御してみる
複数のBotを出現させる
Botを移動させる
Third Person Viewにする
仕掛けを作る:物体を動かす
Triggerを使う
物体を移動する:アニメーションエンジンMatinee
ゲームができちゃった場合:ライセンスは?

  • 関連タイトル:

    Unreal Engine

  • この記事のURL:
line
4Gamer.net最新情報
トピックス
スペシャルコンテンツ
注目記事ランキング
集計:10月20日〜10月21日
タイトル評価ランキング
83
82
80
OCTOPATH TRAVELER (Nintendo Switch)
55
51
Conan Outcasts (PS4)
2018年04月〜2018年10月