原カバンは鞄のお店ではありません。

Unityを使ったゲーム制作のあれこれを綴っていきます。

【雑記】作りたかったゲームと作ったゲーム:GameJamを振り返る(実装編)

話題と拡散

「たった1人の投稿が大きな輪に広がって」というSNS神話を信じている純粋な皆さんこんにちは。私はこれまでブログもTwitterもそこまで積極的に利用していませんでしたが、事前の話題も仕掛けもない投稿がバズってTV等に取り上げられて彼方此方のマスコミから取材を受けるようなるとか、そんな幸運が転がっているなのらもっと積極的にSNSを利用していこうと思いました。嘘だけど。

 

前回からの続き

さて、前回のブログではGW中に製作したGameJam投稿作品『切磋琢磨するしかない!』について企画からコンセプト決めまでの過程を記事に書きました。

 

【雑記】作りたかったゲームと作ったゲーム:GameJamを振り返る(その1) - 原カバンは鞄のお店ではありません。

 

『room6GameJam2020』兼『おうちGameJam』投稿作品はこちら

unityroom.com

 

『切磋琢磨するしかない!』は螺旋状のステージをジャンプだけで進んでいくアクションゲームとなっています。

今回はこのゲームを作るにあたって苦労した点や工夫した点についてを実装編として記事に記したいと思います。

 

物理演算で公転させる

『切磋琢磨するしかない!』ではステージが螺旋状となっている為、プレイヤーのキャラクターは当然ながら螺旋の中心を軸とした公転となるように動かさないといけません。

Transformを使用した公転運動はRotateAroundメソッドがUnityで用意されていますが、今回の場合は物理演算を活用するのでRotateAroundではなく、Rigidbodyに力を加える方向を調整して公転運動を実現しています。

 

これについてはブログでも以前記事にしました。

【Unity】RigidBodyを使って螺旋階段を登りたい - 原カバンは鞄のお店ではありません。

 

要は『円軌道の接線方向に力を加え続ける』ことで公転運動を実現しているのですが、キャラクターは止まっている場合もあるのでジャンプしている間だけ『接線方向に力を加える』ということになります。

しかし、接線方向に加える力はForceMode.Force(継続的な力)となるので、この力を掛けづけるとキャラクターの挙動しては移動方向へ引っ張られたような挙動になります。

 

試しに、ジャンプ開始時にForceMode.Impulse(瞬間的な力)を加えただけの場合と、ジャンプ中にForceMode.Forceで力を加え続けた場合の動作を比較すると、キャラクターのジャンプ軌道は放射線より不自然に伸びた軌道になりちょっと違和感を覚えます。

 

ジャンプ開始時のみ

f:id:Karvan:20200519214355g:plain

 

ジャンプ中に力を加えた場合

f:id:Karvan:20200519214446g:plain

 

この為、接線方向に力を加えるのはジャンプ中全てではなく、ジャンプ開始から一定時間だけ、としています。

 

ここで問題が

実は『円軌道の接線方向』というのは『円軌道から離れる方向』となるので、接線方向に力を加えるのを一定時間だけとすると、その後は着地するまで円軌道から離れていき、どうしても公転運動の円周が徐々に大きくなる運動となってしまいます。

 

図にするとこんな感じ

f:id:Karvan:20200519214605p:plain

 

この為、『切磋琢磨するしかない!』ではジャンプ中に加える力は『円軌道の接線方向ベクトル』に『軌道を戻す方向ベクトル』を加えた方向に力を掛けるようにしています。

 

f:id:Karvan:20200519214710p:plain

 上の図のオレンジの方向へ力を掛ける

 

その他の調整

キャラクターの挙動を物理演算に任せると言う事で、上記の対応に加えてジャンプ時に加える力や角度、地面との反発係数や摩擦係数だったりのパラメータを色々変えながらテストが必要でした。

 

その中で分かった事

  • ジャンプを繰り返すなら、着地のタイミングでrigidbodyのvelocityを0にした方が良い
  • オブジェクトの重心はRigidbodyのcenterOfMassで変えることができる

他にも色々な修正を加えて納得できる挙動になるまで時間がかかりました。

 

また、当初はキャラクターが画面の中央に来るように設定していたのですが、足場が螺旋状(円筒状)に並んでいるステージ構成上、どうしても移動先の地点が見ずらくなる、また、前(右)へしか進まない為、自機より後ろの領域が多い(=プレイヤーにとって無意味な領域が増える)と言う事に気づいて、目標地点が中央に来るようなカメラ位置に変更しました。

 

自機が中央の場合

f:id:Karvan:20200519214850p:plain

 

左寄りに修正

f:id:Karvan:20200519214926p:plain

こっちの方がプレイしやすいし、無駄がない

 

以降の作業はバタバタ

上記の色々な調整に時間を取られたせいでroom6gamejam2020の締め切りが5/6なのに、2日前になってやっとステージ作成に取り掛かる状態、しかも最終日の5/6はなぜか出勤日だったので実質的な締め切りは5/5、「あー、終わらないかも」と半分絶望的な気分で作業を進めていました。

 

まぁ、ステージの制作はギミックをステージ上に並べるだけだったのですが、その配置でクリア可能なのか設置する毎にテストプレイで確認する必要があって思った以上に作業が進まない、しかもSEやBGM関連の処理も全然未実装だったので本当にギリギリの作業でした。

それも日が変わって最終日の深夜になってやっと全作業が終了。なんとか期限内にunityroomへ投稿することができました。どうもありがとう。

 

作業を終えて・・・

振り返ってみると、今回は物理演算を使ったゲームを作るのが初めてと言う事もあって、色々な調整に時間が掛かったという印象です。

作品の出来自体は自分的には満足なのですが、ゲームバランスの考慮等々の配慮が足らなかったせいなのか評価はイマイチで、閲覧数(=プレイ数)もなかなか増えずにいます。残念。

 

『おうちGameJam』では実際にプレイ実況を配信されるそうなので、そちらの反応も楽しみにしつつ、今回の反省点を次作以降に繋げていければなぁ、と思っています。

 

『切磋琢磨するしかない!』では新たに物理演算に関するアセットを購入して使用しているので、そちらに対する使い方、感想等は次回の記事で。

 

【雑記】作りたかったゲームと作ったゲーム:GameJamを振り返る(その1)

GWはGameJam三昧だったぞい

何の楽しみもないGWが終わり、地方によっては巣籠もりの季節もボチボチ終わりそうですが私の住んでいる福岡では未だに気の抜けない状況となっています。

毎年GWは何もないと言いつつもスポーツ観戦やライブ観戦、お祭り等々の行楽行事が詰まっていたのですが、今年はそれが全くのゼロで本当に何の予定もない長い休日が続いただけでした。

 

今年はこんな世間の情勢を反映してか、GameJamという名の短期間ゲーム開発イベントが三本連続で開催されていました。

前回の記事では『Unity1Week』と『room6GameJam2020』の二本のGameJamが開催されるよ、と紹介しましたが、その後に『おうちGameJam』というGameJamも開催の発表があり、どれも重複エントリー可能ということもあってゲーム開発者界隈では例年以上に盛り上がっていました。

 

ちなみに『おうちGameJam』とは・・・

panora.tokyo

5月1日~5月10日の期間にウェブやスマホ、PCなどで遊べるゲームを制作。
5月31日までに専用フォームから必要事項を入力のうえ応募すると、Unityアセット10%割引クーポンが5枚もらえます。
さらにVTuberメディアということで、できあがったゲームを遊んでくれるゲーム好きなVTuberさんも大募集!
好みのゲームを選んで生放送や動画を投稿してもらう企業案件で、最大10名のVTuberさんを募集します。

 

とのことで、これまではゲームを投稿してもゲーム開発者の内輪による評価がほとんどでしたが、VTuberさんに遊んでもらえると言う事で展示イベントなどに参加できない地方の開発者としては貴重な意見が聞ける(かもしれない)GameJamとなっています。

あとクーポン貰える。これ大事

 

作った作品の紹介

そんな訳で私は『room6gamejam2020』と『おうちGameJam』の二つに参加させて頂きました。

(『Unity1Week』は期限に間に合わず&お題に沿ったものにならず・・)

 

unityroom.com

螺旋状のステージをジャンプのみで前へ進んでいくアクションゲームとなっています。

自機のキャラクターは全て物理演算を活用しており、少し難易度が高いゲームとなっていますが、ゲームオーバーはなくマウスクリックだけで遊べるので気軽に楽しんでいただけると幸いです。

 

製作過程を振り返る

『おうちGameJam』では応募特典として

  • ゲーム作成のノウハウなどをブログで公開:Unityアセット10%割引クーポンを 5枚プレゼント
  • ゲーム内で使っているアセット活用ノウハウをブログで紹介:Unityアセット10%割引クーポンを 5枚プレゼント

とあるので、今回は上記のゲームの製作過程を振り返りたいと思います。

 

 ■企画

 GameJamに参加するにあたり、「物理演算系のゲームを作りたい」というのが最初の目標でした。

これまでキャラクターの挙動は全てスクリプトで制御するようなゲームを作っていましたが、今回は物理演算に制御を丸投げしたゲームを作ってみよう、そんな軽い気持ちでゲームの仕様を決めてました。

 

ただ「物理演算系のゲーム」という仕様は決まっていても、どんなコンセプトで何を最終目標にするのか、を開発前にハッキリ決めておかないと製作途中で仕様がブレブレになり、結果良く分からないものが出来上がってしまいます。

 

私が物理演算を使用したゲームとして直ぐに思い浮かんだのが「Getting over it」でした。

「Getting over it」は一部で"壺おじ"という愛称で親しまれているように、奇抜なキャラクターデザインで有名なゲームですが、内容の方はしっかりと計算されたやりごたえのあるゲームデザインで、各種メディアやゲーム実況者に取り上げられて賞賛(?)されているゲームです。

 

そこで『俺も"壺おじ"ゲーム作りたい』と分不相応な企画を立てるに至ったのです。

 

■分析→コンセプト決め

今回公開した「切磋琢磨するしかない!」では螺旋状のステージを進んでいくアクションゲームとなっています。

キャラクターは前へ上へ、一方向にしか進めませんがステージが螺旋状となっているため、もし操作ミスでコースから外れると落下して円周一周分(あるいはそれ以上)元の場所に戻ってしまいます。

 

これは「Getting over it」をパク・・オマージュとするために私なりに分析した結果、「Getting over it」の最大の特徴が「一つのミスでそれまでの進捗がゼロになる」ことにあると考えて、それを最も良く実現できるのが「螺旋状のステージ」だと結論付けたからです。

 

巷のゲーム実況の動画を観てみると「Getting over it」ではとにかく実況者がイライラを爆発させている場面が多いです、中にはマウスを叩き割らんばかりに怒りを露にする実況者もいました。

これが「操作ミスで別ルートへ進む」だったら、それほど怒りを覚えることもないと思うのですが「元の場所に戻る」は積み上げてきたものを全て失う、と言う事を意味します。思うように事が運ばず逆に元へ戻ってしまったら、誰だってイライラするでしょう。

なので今回の開発にあたりゲームコンセプトとして

  • 操作が単純
  • トライ&エラーを繰り返す
  • ゲームオーバーがない
  • イライラする(させる)

を掲げて、それを実現するために

 

  • 螺旋状のステージ
  • マウスクリックだけでプレイ可能
  • でも操作は難しい

これらを満たすようなゲームを目標にすることにしました。

 

長くなったので、実装中に学んだノウハウ等は次回の記事で・・・

 

 

 

 

【Unity】Colliderをスクリプトから無効化する

unity1weekとroom6gamejam

何処にも行けないGWを目前にunity1weekが始まりました。今回のお題は「密」だそうで、毎年話題の「今年の漢字」並みに世相を反映したお題となっています。これと同時開催として毎年恒例となっていたroom6さん主催のroom6gamejamも始まっています。

同じ作品でどちらのイベントにもエントリー可能だそうですが、ちょっとだけ受付期間や評価方式が異なるので注意が必要です。

 

■Unity1Week

  • 受付期間: 2020/04/27 00:00 ~ 2020/05/03 20:00 (遅刻可)
  • お題:『密』
  • 投稿時のハッシュタグ:『unity1week
  • 評価期間: 2020/05/04 ~ 2020/05/10
  • 評価方式:プレイヤー投票による採点方式
  • イベントURL: https://unityroom.com/unity1weeks

 

■room6GameJam2020

  • 受付期間: 2020/04/27 00:00 ~ 2020/05/06 23:59
  • お題:なし
  • 投稿時のハッシュタグ:『room6gamejam2020
  • 評価期間: 2020/05/07 ~ 5月下旬
  • 評価方式:プレイヤー投票、および各審査員による副賞
  • イベントURL: https://www.room6.net/room6gamejam2020

 

一応、前回の記事のネタの為にちょっとだけ作ったプロジェクトがあるので私も参加する予定です。

まぁどちらにも参加できれば良いのですが、期限に間に合わない&お題に沿ったものになりそうもない、ということで『room6gamejam2020』だけのエントリーになるかと、、、そちらの期限には間に合うように頑張りたいと思います。

 

 と、いうわけで・・・

前回の記事でも紹介したようにエントリー用の作品はキャラクターがジャンプしながらステージを進んでいくアクションゲームになる予定なのですが、そこ、良くあるやつって言わない、個人的な挑戦としてキャラクターの動作にRigidbodyの物理演算を活用することに取り組んでいます。

 

これまでは直にtransformの位置や角度を変更してキャラクターを動かしていたのですが、それを今回は物理演算で実現する為、こちらの意図とは違う動作になったりすることが良くあります。

直近でぶつかった問題が・・・

 

f:id:Karvan:20200428201654g:plain

斜面を全く登れない・・・

 

最初はジャンプ時に力を加える方向が問題なのかと思ってプログラムのロジックを見直したりしたのですが全然直らず。

色々試した末、キャラクターの動きを良く良く見直して、ジャンプの立ち上がりの時にキャラクターのColliderが斜面のColliderに引っ掛かっているのではないか、という結論になりました。

 

Colliderの設定

キャラクターのColliderには複数のColliderでその形が簡略化したものになるよう設定しています。

 

キャラクターのCollider

f:id:Karvan:20200428201856p:plain

 

分からいずらいのでColliderだけにするとこんな感じ、どっかのアニメの潜水艦みたいな形になっています。

f:id:Karvan:20200428201943p:plain

 

どうやら、この胴体部分のCapsuleColliderがジャンプの立ち上がりの時に斜面に引っ掛かって、ジャンプしようとしても直ぐに斜面に戻されて全然前に進めない状態になっているようで、つまりはジャンプ開始直後はこのCapsuleColliderを無効化しないといけない、ということになります。

 

早速、Google先生に尋ねてみると、Colliderの有効/無効の設定は通常、Inspector上のチェックボックスによる設定で行いますが、スクリプトではColliderコンポーネントのenabledオプションの値を変更することで、設定の変更を行うことができることが分かりました。

 

private Collider[] CapCollArray;

void OnEnable()
{
    // CapselColliderの取得
    CapCollArray = this.GetComponents<CapsuleCollider>();
}

void Enabled_Collider()
{
    // Colliderを有効化する
    foreach (CapsuleCollider col in CapCollArray)
    {
        col.enabled = true;
    }
}

void Disabled_Collider()
{
    // Colliderを無効化する
    foreach (CapsuleCollider col in CapCollArray)
    {
        col.enabled = true;
    }
}

 

CapsuleColliderは複数あるのでGetComponentsメソッドで配列として取得します。

ジャンプ開始時にDisabled_ColliderをコールしてColliderを無効化、タイマー処理で一定時間、Enabled_ColliderによりColliderを有効化するようにしました。

 

結果・・・

f:id:Karvan:20200428202310g:plain

ちゃんと斜面を登れるようになりました。めでたし、めでたし。。。

 

 

 

 

後は完成させるだけですねぇ・・・(遠い目)

【Unity】CastShadowとReceiveShadow

半休業状態

未だコロナ禍の脅威が収まらない為、全都道府県で外出自粛せざるを得ない日々が続いております。私の会社でも多分に漏れず、出勤率の低減を実現するために2,3日単位の交代勤務体制となりました。そのため、週の半分ぐらい自宅に閉じこもっているのですが、そんな中、朝昼のテレビ番組を拝見すると、殆ど毎日同じ顔触れが同じ話題を同じように話しているので、だったらマスコミも交代で休止すればいいのに、と思っている皆さんこんにちは。あんなの毎日楽しみにしている人っているのだろうか?

 

自宅待機中に

プロジェクトのセキュリティ上、自宅でのテレワークができないので自宅待機中は完全な休みとなっています。

よって自宅で暇を持て余してしまい、以前ブログの記事の為にちょっとだけ作っていたものをアレコレ改造していました。

 

www.karvan1230.com

上の記事の中でRigidbodyを使った公転運動に挑戦し、ボールが螺旋階段を登るような処理を作っていたのですが、それをちょっと改良して・・・

f:id:Karvan:20200421204546g:plain

キャラクターがぴょんぴょん跳ねて登るようにしました。
画面をクリックすると力を蓄えて高く遠くへジャンプします。

 

ここから色々加えてゲーム化出来そうかなー、と思っているのですが、試作段階なので画面がちょっと味気ないです。
なので手始めにキャラクタ-の影を地面に表示してみることにしました。

 

影を表示する

Unityで3Dモデルに影を投影するには二段階の手順が必要です。


まず、影を落とす側のMeshRendererの設定で「Cast Shadows」の設定をONにします。

f:id:Karvan:20200421205907p:plain

 

次に影が投影される側のMeshRendererの設定で「Receive Shadows」の設定をONにします。

f:id:Karvan:20200421210002p:plain

 

これでキャラクタ-の影が地面に投影されることになります。
早速動かしてみると・・・

f:id:Karvan:20200421210137g:plain

 

・・・お気づきいただけだろうか・・・

 

透過する影

キャラクターが移動している地面は螺旋階段状になっているのですが、キャラクターの落とした影が二段目の地面と、一段目の地面で二重に投影されています。

f:id:Karvan:20200421210336p:plain

 

どうやらUnityではCastShadowで作られた影はその投影範囲にあるReceiveShadowsが設定されたMesh(3Dモデル)に全て投影されるらしい。

つまりキャラクターと地面の間に他のMeshがあってもその影響は考慮されていない。

なので、地面側もキャラクターと同様に影を落とすよう、「Cast Shadows」をONに設定する必要があると言う事で・・・

 

f:id:Karvan:20200421210709g:plain

上の動画は地面側にも「Cast Shadows」を設定したパターンです。

不自然な影は消えましたが、今度は影ばっかりで画面が暗い、加えてキャラクターのエミッション設定でこっちが不自然に見えるという結果に・・・ん~、一体どうしたものか・・・

 

【Unity】アセット:First Person Narrative Adventure を使ってみよう(その3)

新年度

4月になり年度が新しくなりましたが全くそんな気がしない皆さんこんにちは。折角の休日になっても何処にも行けない、何の娯楽も楽しめないない日々が続いていますが、誰かの所為にしても状況は好転しないので各自できることを頑張っていきましょう。

 

そういえば、お昼の番組で司会者が「(外出自粛の成果が上がらないのは)『最低限』7割とか、『できる限り』8割とか、そんな及び腰の要請を政府がしているからだ!!」と憤っているのを見て、「俺がテストの成績が悪いのは先生達が厳しく指導しないからだ!」と逆切れしていた同級生(馬鹿)を思い出し、少しほっこりしました。家にいても何かしら楽し事は見つかるものです。

 

終わりが見えたチュートリアル

AVG制作用プラットフォームのアセット「First Person Narrative Adventure + Complete Puzzle Engine」(長いのでFAで略)

assetstore.unity.com

概要とチュートリアルの紹介を始めて今回で4回目になります。

【Unity】アドベンチャーゲームできるかな

【Unity】アセット:First Person Narrative Adventure を使ってみよう(その1)

【Unity】アセット:First Person Narrative Adventure を使ってみよう(その2)

 

前回は「鍵を取得」→「鍵でドアを開ける」を行うまでの流れを紹介しましたが、今回は「棚や机の引き出しを開ける」→「吹き出しの中のメモを見つける」→「メモを読む」までの処理を実装します。

 

 引き出しを作る

メモや日記、鍵などのアイテムが保管されている「引き出し」というプレハブはFAで既に用意されています。

 

ObjCreatorウィンドウ(Tools → AP → Object Creator を選択)でSelect Catergoryに「05 Drawer」を選択、プリセットとして用意されている1~3段の引き出しをシーン内に作成することができます。

f:id:Karvan:20200414220814p:plain

 

Createボタンを押して作成した引き出し(1段)。見ても分かるようにFAで必要なコンポーネントがアレコレ設定されています。

f:id:Karvan:20200414221037p:plain

 

この段階でゲームを実行すると「引き出しを開いて中を覗く」という動作を行うことができます。


引き出しだけではちょっと寂しいので棚の3Dモデル(FAに同梱されている)に当てはめて動かしてみました

f:id:Karvan:20200414221348g:plain

 

メモの設定

AVGではプレイヤーにヒントを与えたり、ストーリーを説明するアイテムとして「本」「メモ」があります。

これらのテキストはインベントリ等で表示されることが多いですが、FAでも同様にTextアイテムとして設定されているオブジェクトに対して「アイテムの取得」「テキストの表示」を行うことができます。

 

前回の「鍵」の手順と同様に「メモ」となるモデルをHierarchy上へドラッグして設置、その「メモ」を選択した状態でTools → AP → Object Creatorを選択してObjCreatorのウィンドウを開きます。

f:id:Karvan:20200414221647p:plain

Select Catergoryに「03 Items (Text Viewer)」を設定
Diaryにチェックを入れて、Nameに「メモ」の名前を入力

 

Applyボタンを押すと「メモ」オブジェクトにコンポーネントが追加されます。

f:id:Karvan:20200414221724p:plain

 

Text Propertiesコンポーネントの「Open Window Tab:・・・」ボタンを押すとText管理のウインドウが表示されます。

f:id:Karvan:20200414221750p:plain

ここに「メモ」で表示するタイトルとテキストを設定します。

 

この「メモ」を先程作成した引き出しの中に設置して、「引き出し」の子オブジェクトとします。

f:id:Karvan:20200414222250p:plain


この状態でゲームを実行してみるとこんな感じになります。

f:id:Karvan:20200414222133g:plain

机からメモを取り出してテキストを表示、引き出しを閉じた後、Iキー押下でインベントリ表示、Diaryボタンを押すとテキストが再読できます。

 

学習は終わらない

これでチュートリアルは終わりです、が、FAで用意されている機能を理解するには未だ学習が足りません。

なにせFAで用意されているドキュメントは

f:id:Karvan:20200414222615p:plain

これだけあり、チュートリアルはこのうちのPart_1に過ぎないからです。

 

オリジナルのAVGを作るにはここからがスタートということで、いつか成果が発表できるようになったらまた記事を書きたいと思います。

 

【Unity】アセット:First Person Narrative Adventure を使ってみよう(その2)

緊急事態宣言

振り返れば社会人生活も長いので、進捗が大幅に遅延して炎上したプロジェクト等に参加した経験も一度や二度じゃないのですが、その所為もあってか、大変な時ほど前を向くことの大事さを思い知らされます。

困難な状況になると「どうしてこんなことに・・・」「あの時ああしていれば・・・」「誰々が悪い、誰々の責任だ」とか後ろ向きなことを言いたくなるのですが、そんなことは全くの無駄で足を引っ張るだけ、と言う事も分かっているので、今は各々が自分のできる範囲の事を愚直に進めるだけだと思います。

 

未だ終わっていなかったチュートリアル

さて、AVG制作用プラットフォームのアセット「First Person Narrative Adventure + Complete Puzzle Engine」(長いのでFAで略)

 

assetstore.unity.com

アセットストアの中ではちょっと値段が高めのアセットですが、中々に便利で機能も豊富なアセットなので前々回からこのアセットについての記事を書いています。

 

【Unity】アドベンチャーゲームできるかな

 

【Unity】アセット:First Person Narrative Adventure を使ってみよう(その1)

 

前回の記事でチュートリアルを紹介し終わったと思っていたのですがドキュメントを確認すると未だ残っていたので、今回は残りのチュートリアルを進めていきます。

 

 アイテムを取る、ドアを開ける

前回の記事ではAVGで良くある「パズルを解いてドアを開ける」という動作を実装しましたが、今回は普通に「鍵を取ってドアを開ける」という処理を実装します。

 

 製作上で「鍵」というアイテムは「パズル」のように内部処理的なフラグ(パズルが解かれたかどうか)は必要ないので、ただ単純にプレイヤーがアイテムとして持っているかどうか、がドアを開ける判断基準となります。

FAではそういったアイテムを一括で管理しており、それをインベントリ等に反映する処理も行っています

 

まず、最初に「鍵」のモデルをHierarchy上へドラッグして設置、その「鍵」を選択した状態でメニューのToolsから AP → Object Creator (w_ObjCreator) を選択してObjCreatorのウィンドウを開きます。

 

f:id:Karvan:20200407221916p:plain

 Select Catergoryに「02 Items (3D Viewer)を設定
Inventoryにチェックを入れて、Nameに「鍵」の名前を入力

 

Applyボタンを押すと「鍵」オブジェクトにコンポーネントが3つ追加されます。

 

f:id:Karvan:20200407222027p:plain

 「Text Properties」「IsObject Activated」「Save Data」が追加される

 

このうち「Text Properties」コンポーネントにあるManagerID欄に注目してください。

この値がFAで管理しているアイテムのキーとなります。

(この値は後で使用します。)

 

インベントリの設定

Text Propertiesコンポーネントの「Open Window Tab:・・・」ボタンを押すとアイテム管理のウインドウが表示されます。

 

f:id:Karvan:20200407222308p:plain

アイテム管理ウィンドウのピンク色の部分がインベントリに対する表示設定です。

  • Title:インベントリに表示するアイテムの名前
  • Sprite:イベントりに表示するアイコン
  • Description:アイテムの説明文

インベントリでアイテムモデルを表示させるために「Prefab」欄のCreateボタンを押します。

 

ここまでの設定を行うとゲーム内で

  1. 「鍵」に近づく→クリックアイコンが表示される
  2. クリックアイコンをクリック→インベントリに格納
  3. Iキーを押す→インベントリが表示され「鍵」のアイコン表示

の動作を行うことができるようになります。

 

f:id:Karvan:20200407222530g:plain

 

鍵でドアを開ける

「鍵」を取ることができるようになったので、次はドア側の設定を行います。

前回の記事ではパズルを解くことがドアを開ける条件でしたが、今回はそれをPlayerが「鍵」を持っていること、に変更します。

 

ドアオブジェクトを選択してInpsectorに表示される「Obj Translate Rotate」コンポーネントの「5-Lock Options」欄に注目します。

f:id:Karvan:20200407222750p:plain

 

中ほどにある「ObjectID」欄に「鍵」アイテムのIDを設定するわけですが、この値は先程説明した「鍵」側の「Text Properties」コンポーネントにあるManagerID欄の値を指定します

 

この設定後のゲーム動作。

最初にドアに近づいてもドアは開きませんが鍵を取ってから近づくとドアを開けることができます。

f:id:Karvan:20200407222951g:plain

 

今回はアイテムの取得とそれに付随するイベント(ドアを開ける)の設定について説明しました。

次回ではこのアイテムが格納されている「引き出し」の設定と、「メモ」や「本」などのストーリーを説明するのに必要なテキストの表示設定ついて記事にしたいと思います。

【Unity】アセット:First Person Narrative Adventure を使ってみよう(その1)

全然やる事ないSUNDAY

コンサートもスポーツも全て中止、旅行や繁華街への外出も自粛で休日はPS4がフル稼働の皆さんこんにちは。私はSEKIROと同じ気分でミッションを中断したら中ボス戦やショートカットの開通を含め全て初めからやり惜しという驚くべき事態に遭遇して、せっかく買った仁王2もやる気が失せています。猿鬼が嫌すぎる。

 

First Person Narrative Adventure

前回の記事でAVG制作用プラットフォームのアセット「First Person Narrative Adventure + Complete Puzzle Engine」(長いので以後はFAで略)についてその概要を紹介しました。

 

assetstore.unity.com

こんな感じの一人称視点AVGがコード不要で作成できる。

f:id:Karvan:20200324215350g:plain

 

なので今回からはチュートリアルを参考に、実際にFAを使ってどのようにAVGを作っていくのか学んでいきたいと思います。

 

プロジェクトの立ち上げ

FAではAVGの基本的な機能を備えたSceneをデフォルトで用意しています。

よって新規にプロジェクトを立ち上げてAVGを作る際には、このDefaultSceneをベースにゲームの舞台を作り上げていきます。

 

Tools → AP → Project Managerを選択するとウィンドウが開くのでプロジェクト名を入力し「Create New Project」ボタンをクリックします。

f:id:Karvan:20200331213232p:plain

 

するとプロジェクト内(Assets>AP>Assets>Scenes)に2つのSceneが作成されます。

f:id:Karvan:20200331213252p:plain

 

このうち01_DefaultSceneがAVGの舞台となるScene、ゲームを作っていくSceneとなっています。

(00_MainMenuはタイトルメニュー画面となるSceneです。)

 

DefaultScene

早速01_DefaultSceneを開くと色々なオブジェクトがScene内に用意されていることが分かります。

f:id:Karvan:20200331213431p:plain

 

これらはキー操作やプレイヤーの移動処理、オブジェクトの検知などの処理を実装しているので、この段階でPlayボタンを押下して動作を確認する事ができます。

 

f:id:Karvan:20200331213539g:plain

DefaultSceneを開いて直ぐの動作。

マウスで視点移動、ESCキーを押すとPause状態となりメニューウィンドウが開きます。

 

先程も記載したようにFAではこの状態のSceneにオブジェクトを配置する事でAVGを作っていきますが、AVGで必要なオブジェクトもある程度自動で作成することができます。

 

Door,Puzzle

一般的に探索型AVGでは、移動領域が一定エリアに制限される→制限を解除するためのキーを見つける→制限を解除して次のエリアへ・・・を繰り返してストーリーを進めていきます。

 

この「エリアを制限する、解除する」典型的なオブジェクトがDoorで、「解除するためのキー」となる要素がPuzzle、となりますが、これらはFAで簡単に作成することができます。(Puzzleはアセットに内包されているPrefabを使用する)

 

Tools → AP → Object Creatorを選択するとObjCreatorのウィンドウが開きますが、こちらでAVGで使用するDoorやPuzzleが作成できます。

f:id:Karvan:20200331213838p:plain

 

Scene Categoryで「04 Door」を選択し、Createボタンを押下すると

f:id:Karvan:20200331213937p:plain

DoorオブジェクトがScene内に自動作成されます
(左開けか、右開けを選択できます)

 

このDoorオブジェクトにはFA内で必要となるコンポーネントが既にアタッチされているので、このままの状態でも必要な箇所に配置すればプレイヤーの検知や開閉の動作を行ってくれます。

 

Doorを作った直後、Playボタンを押して動かすとこんな感じ

f:id:Karvan:20200331214402g:plain

 

同様にObjCreatorのウィンドウからPuzzleを作成します。FAが用意している7種類のPrefabの中から選択して作成しますが、Doorと同様に必要なコンポーネントがアタッチされているので、そこでPuzzleが解かれた時のアクションを指定します。

 

下の設定ではStep0で2秒間待機、Step1で開くDoorのオブジェクトを指定しています。

f:id:Karvan:20200331214525p:plain

 

逆にDoor側のLockOptionsでPuzzleが解かれるまでロック状態にする設定をします。

f:id:Karvan:20200331214614p:plain

 

これでPuzzleが解かれたら自動で開くDoorが出来上がります。

ここまでコードは全く書いていません。

f:id:Karvan:20200331214852g:plain

 

これが基本

以上がFAによるAVG作成の基本となる作業です。
各オプションが細かいので難しそうな印象を持つかもしれませんが、ドキュメントに沿っていけば難しくないと思いますし、全くのノーコーディングでここまで作れるのはかなり便利ですね。(英語だけど)

 

まぁ、本格的にAVGを作るとなると色々なカスタマイズが必要になると思うので、次回からはカスタマイズ要素について記事にしたいと思います。

 

 

◇プライバシーポリシー

●個人情報の利用目的

当ブログでは、メールでのお問い合わせ、メールマガジンへの登録などの際に、名前(ハンドルネーム)、メールアドレス等の個人情報をご登録いただく場合がございます。

これらの個人情報は質問に対する回答や必要な情報を電子メールなどをでご連絡する場合に利用させていただくものであり、個人情報をご提供いただく際の目的以外では利用いたしません。

●個人情報の第三者への開示

当サイトでは、個人情報は適切に管理し、以下に該当する場合を除いて第三者に開示することはありません。

・本人のご了解がある場合
・法令等への協力のため、開示が必要となる場合

個人情報の開示、訂正、追加、削除、利用停止
ご本人からの個人データの開示、訂正、追加、削除、利用停止のご希望の場合には、ご本人であることを確認させていただいた上、速やかに対応させていただきます。

アクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。

このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。このトラフィックデータは匿名で収集されており、個人を特定するものではありません。
この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。

●免責事項

当サイトからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。

当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。

当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。

●プライバシーポリシーの変更について

当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。

修正された最新のプライバシーポリシーは常に本ページにて開示されます。