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

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

【進捗報告】unityroomに投稿した件

夏休み期間につき報告だけ

Ghost of Tsushimaをクリアしてしまい夏休み開始早々手持ち無沙汰になってしまった皆さんこんにちは。
コロナ禍もあり買い物にも映画にも出掛ける事が憚れるので、仕方なくゲーム作りに専念しています。

 

f:id:Karvan:20200728222755g:plain

 

まぁ、そのおかげで開発中のゲームの一部をunityroomに公開するところまでこぎ着けました。

unityroom.com

 

上の動画通り、3Dの探索型の脱出ゲームです。

全5ステージの予定ですが、unityroomで投稿できたのは最初のステージのみとなっています。(残りは現在開発中)

 

1ステージだけなので10分ぐらいで終わると思います。
不具合や改善点等の意見を今後の開発の参考にしたいと思っていますので、上のリンクのコメント欄に投稿して頂けると幸いです。

 

unity1week開催

現在、unity1weekが開催されています。

unityroom.com

今回のお題は「ふえる」だそうで、私と同じく暇を持て余している開発者の方は暇つぶしがてら参加してはいかがでしょうか。
私は先ほどのゲームにお題に沿った構成のステージでも追加して見ようかと思ったり・・・

 

【Unity】アセット紹介:Look Animator

終わらない夏

長かった梅雨がようやく終わって夏が始まったばかりですが、コロナ禍が全く収まる気配がないのでたとえ夏休みでも何処にも行けないし行く予定もない皆さんこんにちは。部屋に閉じこもるしかなさそうですね。ハイそこ、通常通りとか言わない。

 

IKと言えば

Unityで「IK」と言えば「Inverse Kinematics」の事を指します。階段を登る歩幅を合わせたり、物を掴む指の動きを合わせたり、細かなアニメ動作を表現するために使われる技術です。

 

この技術を実装するアセットでは「Final IK」というアセットが有名で、先程の足幅や指、腕の制御だったり、2本足用,4本足用,射撃モーション用など様々なIKコンポーネントが含まれている非常に有用なアセットなのですが、なにせ価格が90ドル(消費税を含むと99ドル)と高いのでなかなか手が出ません。

 

なので、「Final IK」のように体の各部位の制御は必要なくて、首や顔の制御だけで良い、という方に紹介するのが今回取り上げる「Look Animator」となります。

assetstore.unity.com

 

 Look Animator

このアセットはアセット名の通り、首や顔の視線制御に特化したアセットです。
ヒューマノイド(人型)だけでなく、トカゲや蛇のような多関節のモデルにも対応しており、Generic、Humanoid、およびLegacyのすべてのリグで機能します。


また、セットアップはヒューマノイドなら顔のボーンと視線先の対象物を設定するだけなので非常に簡単で、価格も11.99ドルで「Final IK」よりはお手軽な値段かと思います。

 

www.youtube.com

 

 導入は簡単

Hierarchyで対象となるオブジェクト(モデル)を選択したら、メニューからComponent→FImpossible Creations→FLook Animatorを選択します。

f:id:Karvan:20200804212953p:plain

 

FLook Animatorコンポーネントがオブジェクトに追加されるので、Charactor Setup欄のLead bone/Headの項目で顔のボーンを指定します。

f:id:Karvan:20200804213031p:plain


ここでモデルの構造が複雑(子オブジェクトが多数)で顔のボーンがどれか分からないときは「AutoFind」ボタンを押します。
このボタンで自動的に顔のボーンを探して設定してくれます。

 

次に視線先の対象物をTweak Animation欄で指定します。
Object To Followの項目(黄色い網掛けの項目)にシーンビューから対象物をDrag&Dropします

f:id:Karvan:20200804213121p:plain

 

これで基本的な設定は終わりです。
多関節のモデルや、ヒューマノイドでも首と一緒に肩等も動かしたい場合はCharactor Setup欄のAdditional Spine Bonesの項目で追加、視線を動かす動作の細かい修正は先程のTweak Animation欄で設定を変更します。

 

使用例

基本設定を終えて実際に動かすとこんな感じになります。

f:id:Karvan:20200804213320g:plain

 

ヒューマノイドにはアイドル動作のアニメーションが設定していますが、Look Animatorによる視線の移動もアイドル動作と違和感なくブレンドできていると思います。

 

【Unity】今更気づくScene VisibilityとScene Picking

寝不足

長雨だろうがコロナ禍だろうが関係なく家に閉じこもる4連休を過ごした皆さんこんにちは。
普段なら連休明けは「海」やら「キャンプ」やら「花火」やらのリア充ワードが彼方此方から聞こえてきて絶望感に苛まれるのですが、今年は至って快適に過ごすことができています。まぁ、蒙古退治に忙しくて寝不足なんですけどね。

 

え、これって私だけ?

f:id:Karvan:20200728221127p:plain

 

さて、皆さんはUnity 2019あたりからHierarchyタブの左端にグレーの帯が表示されているのにお気づきでしょうか?

f:id:Karvan:20200728221048p:plain

 

私は全く気づきませんでした。。。
実はこの部分にシーン編集時に便利な機能が追加されているみたいです。
Scene visibilityとScene Pickingという機能ですが、調べてみると結構使えそうだったので今回はその紹介。

 

Scene Visibility

例えば、屋内系のシーンを作ろうとすると床と屋根、壁に囲まれた空間になるので、屋内に配置したオブジェクトの位置を動かそうとすると屋根や壁が邪魔になります。

これまでは視界の邪魔となるオブジェクトをInspetorからチェックを外して非アクティブ化していたのですが、そうするとゲーム実行時に元に戻しておかないとゲーム中も表示されないままとなってしまいます。

まぁ非表示化する対象が2,3点なら問題ないのでしょうが、もっと複数になると戻し忘れ(アクティブ化忘れ)の懸念が出てきます。

 

そんな時に使えるのがScene visibility機能です。

グレーの帯の左側をクリックするとアイコンが表示され、シーンビューでゲームオブジェクトをすばやく非表示および表示できます。

f:id:Karvan:20200728222527p:plain

 

これはシーンビューだけの表示/非表示設定なので戻し忘れをしてもゲーム中の表示には影響しません。

f:id:Karvan:20200728221456g:plain

 

Scene visibility機能で表示されるアイコンは複数あるのですがそれぞれ、下記のような意味を持っています。

A f:id:Karvan:20200728221754p:plain GameObjectは表示されていますが、一部の子オブジェクトが非表示設定になっている。
B f:id:Karvan:20200728221832p:plain GameObjectは非表示ですが、一部の子オブジェクトは表示されています。
C f:id:Karvan:20200728221912p:plain GameObjectとその子オブジェクトが表示されます。(通常状態)
D f:id:Karvan:20200728221942p:plain GameObjectとその子オブジェクトは全て非表示です。

 

Scene Picking

こちらも複数のオブジェクトが固まっているようなシーンで使う機能で、誤操作を防止するための機能です。

 

グレーの帯の右側をクリックするとアイコンが表示され、エディターでの作業時に選択可能なアイテムかどうかを設定できます。

f:id:Karvan:20200728222603p:plain


選択不可とするとクリックしたときに選択オブジェクトとして追加されないようになります。

たとえば、大量のオブジェクトがあるようなシーンで作業している場合、特定のゲームオブジェクトが選択されないように一時的にブロックして、誤って編集しないようにすることができます。

 

こちらもアイコンは複数あり

A f:id:Karvan:20200728222013p:plain GameObjectを選択することはできますが、その子の一部を選択することはできません。
B f:id:Karvan:20200728222043p:plain GameObjectを選択することはできませんが、その子の一部を選択することはできます。
C f:id:Karvan:20200728222109p:plain GameObjectとその子を選択できます。(通常状態)
D f:id:Karvan:20200728222142p:plain GameObjectもその子も選択できません。

となっています。

 

なるほど、なるほど

ちょど屋内が舞台の脱出ゲームを作っているので、どちらの機能も便利に使えます。

複数のステージ制となる予定ですが、最初のステージが完成したら体験版としてUnityRoomに公開したいと思います。

f:id:Karvan:20200728222755g:plain

まぁ、蒙古退治に忙しくて、いつ頃になるかは分からないのですが・・・

 

 

【Unity】(小ネタ)TextMeshのMaterial Presetを増やす

夏が来る

以前から「夏に向けてゲームを作る」と言っておきながらちっとも完成せずに、そのくせ週末は中世対馬の亡霊となって島を占領した蒙古兵をバッタバッタと闇討ちのチキンプレイで倒し回っていた皆さんこんにちは。
Ghost of Tushimaが時間泥棒過ぎて睡眠不足です。

 

TextMesh

UnityでTextMeshが標準搭載されてからはUIのテキストにはもっぱらTextMeshを使用しています。
色々な装飾ができて何かと有用なTextMeshなんですが、不便な点もあって、その一つが「一部の装飾の設定がMaterialに準ずる」という点

 

例えばOutlineやGrowなどはフォントのMatrialで設定しますが、このMaterialの設定を変えると当然のことながら同じフォントMaterialを使用している全てのTextMeshの表示も変わってしまいます。

 

通常ならMaterialをコピーして対応しますが、TextMeshで使用しているMaterialはフォント自体のデータも含んでいるため、これをホイホイと増やすしていくとアプリ容量が大変なことになります。

 

そんな時に使用するのがMaterial Presetとなっています。

 

Material Preset

例えば、同じフォントを使用していてもこの部分は文字にアウトラインを表示させたい、とか、光っているように見せたい、という場合はこのMaterial Presetを追加し、装飾をしたいTextMeshにだけそのMaterial Presetを使うように設定してFaceやOutLine等を変更する、という手順を踏みます。

 

このMaterial PresetはMain Settings欄にて変更することができます。

f:id:Karvan:20200721231817p:plain

しかし、このドロップダウンには現在あるMaterial Presetが表示されるのみで新たに追加することはできません。

 

新たにMaterial Presetを追加するには、フォントMaterialのInspectorで右クリックしてコンテキストメニューを表示する必要があります。(ややこしい)

f:id:Karvan:20200721231905p:plain

 

コンテキストメニューのCreate Preset Materialを選択するとフォントアセットと同じディレクトリに新しいMaterial Presetが作成されるので、分かりやすい名前をつけておきます。

f:id:Karvan:20200721232010p:plain

 

その後、先ほどのTextMeshのInspectorに戻ってMain Settings欄を確認するとMaterial Presetが変更できるようになります。

f:id:Karvan:20200721232031p:plain

 この手順、意外と忘れるんですよね~。

【Unity】DOTweenを使ってTextMeshをフェードアウトさせる

長雨

ここ最近ずっと雨の天気で、コロナウイルスもこの雨と一緒に流れ去ってほしいと願っている皆さん、こんにちは。
コロナ禍でどこにも行けないと嘆いていたら、今度は長雨でどこにも行けない。休みの日はほぼずっとBeatSaber三昧ですよ。

 

TextMeshProとDOTween

さて、TextMeshProがUnityに標準搭載されてから随分と立ちます。TextMeshProの利点といえば、拡大しても文字がボヤけることがない事や、装飾のオプションが豊富な事が挙げられますが、DOTweenにTextMeshPro用の拡張メソッドの提供されていることもその一つと言えます。(DOTweenPro版のみ)

 

  • DOScale:文字の大きさを変更する
  • DOFontSize:文字のフォントサイズを変更する
  • DOFade:文字をフェードイン/アウトさせる
  • DOFaceFade:文字のFace(塗り)箇所をフェードイン/アウトさせる
  • DOColor:文字色を変化させる
  • DOFaceColor:文字のFace(塗り)の色を変化させる
  • DOGlowColor:文字のGlow(光沢)の色を変化させる
  • DOOutlineColor:文字のアウトラインの色を変化させる
  • DOText:文字を1文字ずつ表示する
  • DOMaxVisibleCharacters:表示文字数を変化させる

ざっと上げてもこれだけ機能があります。

 

というわけで使ってみる

実際に作成中の脱出ゲームで上記のメソッドを利用したUIを作ってみました。

イベント等が起こった時に表示するメッセージをFaceのフェードアウトとOutLineの色変更を実行しています。

f:id:Karvan:20200714222349g:plain

 

ソースはこんな感じ。

public Color EndColor;

TextMeshProUGUI text = this.GetComponent<TextMeshProUGUI>();
MsgSeq = DOTween.Sequence();

MsgSeq.Join(
    text.DOFaceFade(0.0f, 3.0f)
    );
MsgSeq.Join(
    text.DOOutlineColor(EndColor, 3.0f).SetDelay(0.5f)
    );

非常に短いコードで実装できました。

これにDOMaxVisibleCharactersで表示文字数を徐々に減らしていくようにすると

MsgSeq.Append(
    text.DOMaxVisibleCharacters(0, 3.0f)
    );
MsgSeq.Join(
    text.DOFaceFade(0.0f, 3.0f)
    );
MsgSeq.Join(
    text.DOOutlineColor(EndColor, 3.0f).SetDelay(0.5f)
    );

 

 こんな感じ

f:id:Karvan:20200714222745g:plain

 

センスがあればもっとおしゃれな演出も作ることができると思います。

【Unity】【作業ログ】First Person Narrative Adventureでオリジナルのパズルを作る

PSVR

給付金でPSVRを購入し、ウキウキでSkyrimVRをPlayしてみたら開始5分でVR酔いして以後全く手を付けていない皆さんこんにちは。
走りながらジャンプしてドラゴンから逃げろとか無理ゲー、着地と同時に吐き気を催します。

 

脱出ゲーム

そんな訳でPSVRではもっぱらBeatSaberを楽しんでいるわけですが、そんなゲームの誘惑に惑わされながらも、夏に向けたゲーム制作のほうも(それなりに)進んで言います。

 

このブログでも記事にしていますが一人称視点で進む脱出ゲームになる予定です。

f:id:Karvan:20200609220240g:plain



このゲームは一から作っているわけでなく、フレームワーク的なアセットを購入してそれをベースに作成しています。
それが「First Person Narrative Adventure + Complete Puzzle Engine」(長いので以後、FAに略)
このアセットについても当ブログで数回にわたって記事にしています。

 

【Unity】アドベンチャーゲームできるかな - 原カバンは鞄のお店ではありません。

【Unity】アセット:First Person Narrative Adventure を使ってみよう(その1) - 原カバンは鞄のお店ではありません。

【Unity】アセット:First Person Narrative Adventure を使ってみよう(その2) - 原カバンは鞄のお店ではありません。

【Unity】アセット:First Person Narrative Adventure を使ってみよう(その3) - 原カバンは鞄のお店ではありません。

 

ざっくりというと一人称のAVGに必要な機能が殆どすべてそろったアセットなのですが、名前に「Complete Puzzle Engine」をあるように、AVGとしての機能だけでなく、ゲーム内で使用できるパズルゲームがPrefabとして提供されています。(40種類のバリエーション)

このパズルゲームはゲーム空間にDragするだけで直ちに使用できるようになっており、パズルを解き始めるときにカメラが寄ったり、パズルの解読と他のイベントとを連動させたりすることできる優れもの、これをステージ内の彼方此方に配置しておくだけでそれなりのAVGが作れちゃいます。

f:id:Karvan:20200707214224g:plain

アセットのデモシーンの一部

 

とは言え、一端のゲーム制作者としては提供されたPrefabをそのまま使うのは何となく気が引けて、少しはカスタマイズしたもの、できればオリジナルのものを使いたいと思うもの。
カメラが寄ったり、オブジェクトをピックアップしたり、他イベントと連動させたりする機能は実装が面倒くさいのでそのまま使って、パズル部分だけをオリジナルなものにしたい。

 

オリジナルのパズル

というわけで、今回はこのFAでオリジナルのパズルを作る手順の紹介。まぁ、このアセットを使っていない方には全然関係ない話だったりするのですが、私自身が後から手順を見返すために(よく忘れるので)この記事を書いています。

目標は下図のような、並んだ数字の空いている箇所に法則が合致する数字を埋める、というパズルを実装すること。

f:id:Karvan:20200707214603p:plain

 

最初にTools → AP → Object Creatorを選択してObjCreatorのウィンドウが開きます。
Selection Category欄で「01 Puzzles」を選択して作成するパズルの種類を選びます。

f:id:Karvan:20200707214656p:plain

 

選ぶことができるのは以下の7種類

  • Sliding:いわゆる15パズル、パネルをスライドさせて並べるパズル
  • Digicode:数値表などを使って導き出したパスワードを入力するパズル
  • Lever:レバーのON/OFFを切り替えて全てのランプを点灯するパズル
  • Cylinder:シリンダーを回転させるタイプのパズル、パズルというか鍵っぽい
  • Pipe:パーツを回転させて通り道を繋げていくパズル
  • Gear:ギアの組みあわせをつくるパズル
  • Logic:オブジェクトを正しいパターンに揃えるパズル

この中で「Logic」を選択してCreateボタンを押下します。

 

ロジックパズル

作成したロジックパズルとは上でも書いたように、配置されているオブジェクトから正しいパターンに合わせて揃えるパズルです。

このパズルは、まずロジックパズルには動かして並べる子オブジェクト(logicsxx)と、そのオブジェクトの配置場所を表す子オブジェクト(Axisxx)があり、logics側のオブジェクトをAxisオブジェクトの位置へ移動、その二つのオブジェクトの属性(Type)が一致した場合、正しいパターンだと認識させる仕組みです。

f:id:Karvan:20200707214931p:plain

 

この正解のパターンはLogicsPuzzleコンポーネントで設定することができます。
f:id:Karvan:20200707215027p:plain

 

色々とごちゃごちゃしていますが、色のついた四角形の部分が正解のパターンを示しています。
各四角形はロジックパズルで並べ替える各オブジェクトと関連付けられていて、図の場合だと左上から順にNo0からNo3の子オブジェクトを表しています。

 

f:id:Karvan:20200707215100p:plain

ロジックパズルの子オブジェクト(logics00~logics03,Axis00~Axis03)が各四角形と関連付けられている。

 

四角形の色は属性(Type)を示していて、四角の上方にあるtype欄から選択して設定します。

f:id:Karvan:20200707215132g:plain

 type欄でtypeを選択して、四角形をクリックすると選択したtypeが設定される。

 

オリジナルパズルに適用

ロジックパズルを作成して正解のパターンを設定したら、動かす各数字のオブジェクトを各logicオブジェクトの子オブジェクトとします。
そして、Axisオブジェクトを並べる場所に設定します。

 

f:id:Karvan:20200707215446p:plain

設置後の状態

 

今回の場合は、並べる候補は4つ(4,5,7,8)なのに正解は2つ(4,8)となっています。5と7の数字はフェイクです。
このようなときはLogicsPuzzleコンポーネントでFakeを設定することでパズル解読の成否判定から除外させることができます。

 

ここまでの設定が完了するとオリジナルパズルが出来上がります。
実際動かしてみるとこんな感じ

 

f:id:Karvan:20200707215737g:plain

パズル開始でカメラが寄って行ったり、オブジェクトを選択すると拡大されたり、配置場所にアイコンが表示されたり等の動作はFA側で実装されているのでこちら側では特に何もしていません。
設定が色々と面倒くさいですがコーディング不要なのは良いですね。あとはこの手順を忘れないように・・・
 

【Unity】CameraのパラメータをDotweenで変更する

特別給付金

ボーナス前に給付金が貰えたのでBeatSaber目的でPSVRのパックセットを購入したものの、BeatSaberのダウンロードコードが期限切れ(2020/6/18まで)で結局ストアで買う羽目になった皆さんこんにちは。
正に『安物買いの銭失い』ってやつですね。これからPSVRのパックセットの購入を検討されている方は注意が必要です。

 

CameraとDotween

一般的にDotweenはゲームオブジェクトを動かす(移動・回転される)際に用いられるかと思いますが、実はTransformコンポーネントだけでなく他のコンポーネントに対するTween(パラメータの変更)もそれなりに用意されています。


まぁ、Dotween.Toメソッドを使えば大抵のコンポーネント・パラメータをすることはできるのですが、専用のメソッドのほうが使い勝手が良いことは確かですし、特にCameraコンポーネントに対するTweenメソッドは覚えておいても損はないと思います。

 

DotweenでCameraコンポーネントに対して用意されているメソッドは以下の通り

  • DOAspect:アスペクト比を変更する
  • DOColor:背景色を変更する
  • DOFarClipPlane:FarClipPlaneのサイズを変更する
  • DOFieldOfView:カメラの視野角を変更する
  • DONearClipPlane:NearClipPlaneのサイズを変更する
  • DOOrthoSize:Orthographicサイズを変更する
  • DOPixelRect:表示画面に対する画素演算範囲を変更する
  • DORect:画面の表示範囲を変更する
  • DOShakePosition:手ぶれ効果(位置)
  • DOShakeRotation:手ぶれ効果(角度)

元々CameraにはOrthographic(正投影)モードとPerspective(透視投影)モードがあるので、それぞれのモードでのみ使用できる(効果のある)メソッドがあります

 

Orthographicモードのみ

  •  DOOrthoSize

 

Perspectiveモードのみ

  • DOFieldOfView
  • DOFarClipPlane
  • DONearClipPlane

ここで、DOFieldOfViewとDOFarClipPlane,DONearClipPlaneはどれも視錐台のサイズに関する設定なので、それぞれを同時に使うと互いのTweenが干渉することになり注意が必要です。

 

実際に使ってみよう

まぁ文章で書いてもピンとこないと思うので幾つかのメソッドを使ってみましょう。
今回、カメラモードはPerspectiveモードとしています。

 

DOFieldOfView

ズームアップ等で使用します。

f:id:Karvan:20200630195411g:plain

 

DOShakePosition

DOShakePosition メソッドでは、duration(揺れる時間)以外のパラメーターはオプション扱いで、指定しなければデフォルト値が使用されます。

f:id:Karvan:20200630195456g:plain

 

DOColor

DOColorはSkyBoxを使用していない場合に使用します。

f:id:Karvan:20200630195529g:plain

 

ここで進捗報告

夏に向けて一人称視点のAVGを制作中ですが、そればっかりでは飽きるので他のゲーム開発にも手を出しています。

f:id:Karvan:20200630195810g:plain

 

まぁ、今年の初めに一週間ゲームジャムに投稿した「Helios Orbit」の焼き直しなのですが、頓挫している2.5D-STGの資産を使って規模を大きくしたいなぁ、と思っています。

完成するかどうかは・・・

 

◇プライバシーポリシー

●個人情報の利用目的

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

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

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

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

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

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

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

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

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

●免責事項

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

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

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

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

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

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