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

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

【Unity】TextMeshProでクリックされた文字列を取得する

緊急事態宣言

もはやコロナ慣れしてしまって緊急事態宣言だと言われても呑気に街へ出かけている皆さんこんにちは。私の住んでいる福岡県でも宣言が出されましたが、私は未だに在宅勤務にならず朝夕の通勤電車に乗っています。何故だろう?そりゃ罰則規定も考慮されますわ、ってかテレワーク推奨しない企業にも罰則つけて欲しい。

 

作り手として

微力ながらもゲームクリエータを志しているので、unityroomに投稿されているような個人製作のゲームを目にすると、純粋にゲームを楽しんだり、発想の意外さに驚嘆したりする前に、「このエフェクトは自作なのかな?アセットなのかな?」とか「この処理はどうやって作っているんだろう?」とか作り手としての目線でゲームを読み解こうとします。

無論、気になった部分全てを分析できるわけないのですが、「こうやっているかな?」とアレコレ夢想したり実際に作ってみたりするのは、勉強になるし楽しい作業です。

 

つい先日のunity1weekでも青木とと氏の「夢の中で、あなたと」というゲームについて非常に興味を惹かれました。

unityroom.com

テキスト形式の脱出ゲームとのことで、ゲーム画面には状況を説明するテキスト文だけが表示されます。

ユーザがテキスト文中のキーワードをクリックすると、そのキーワードが欄外に抽出されて後の場面でそれ文言をアイテムとして使用することができます。例えば 

「僕は机の引き出しからカッターナイフを取り出した」

という文章の"カッターナイフ"という部分をクリックすると、"カッターナイフ"というワードが取り出されて欄外に表示されます。その後に

「ガムテープで蓋をされた段ボールを見つけた」

という文章が表示されたら、先ほどの"カッターナイフ"を"段ボール"の上にドラッグすると

「カッターナイフで段ボールを開けると中にはドアの鍵が入っていた」

という文章が表示され、場面が展開していきます。ちょっと文章では伝わりにくいと思うので、上のリンクから是非プレイしてみてください。

 

とてもユニークなゲームシステムでunity1weekでも総合7位を勝ち取っているのですが、私的にはテキスト文中から一部ワードを切り出して欄外へ出す方法が非常に気になる。ってか私もアレやってみたい、作ってみたい!というわけで同じような事が出来ないか方法を探ってみました。

 

TextMeshProのLinkタグを利用する

TextMeshProではテキスト内にリッチテキストタグを使用することが出来ます。

 主にColorやSize等のタグでテキストのレイアウト、見た目を変更する際に利用されていると思うのですが、実はLinkタグを使ってハイパーリンクを張ることもできます

 ただし、ハイパーリンクを利用するにはスクリプトでクリックされた箇所のハイパーリンク(URL)を取得すしてApplication.OpenURL等でリンク先を表示する、という処理を作りこむ必要があります。

using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;

[RequireComponent( typeof( TextMeshProUGUI ) )]
public class Example : MonoBehaviour, IPointerClickHandler
{
    public void OnPointerClick( PointerEventData e )
    {
        TextMeshProUGUI text = GetComponent<TextMeshProUGUI>();
        Vector3 pos = Input.mousePosition;
        Camera camera = canvas.renderMode == RenderMode.ScreenSpaceOverlay ? null : canvas.worldCamera;
        int index = TMP_TextUtilities.FindIntersectingLink( text, pos, camera );

        if ( index == -1 ) return;

        // リンクを取得
        TMP_LinkInfo linkInfo = text.textInfo.linkInfo[ index ];
        string url = linkInfo.GetLinkID();
        
        // リンク先を表示
        Application.OpenURL( url );
    }
}

上記のスクリプトをTextMeshProのオブジェクトにアタッチして使用します。

注意事項としてTextMeshProがあるCanvasはRenderModeが「Screen Space - Camera」か「World Space」である必要があります

 

例えば

Clickで<link="https://www.karvan1230.com/">リンク</link>をとりだす

という文章について上記のスクリプトを利用すると、

f:id:Karvan:20210119215811g:plain

Linkタグで囲まれたテキスト部分(”リンク”)をクリックするとLinkタグに設定されたURLを取得することができます。

 

Linkタグは一文中に幾つも設定できるので、例えば以下のように

Clickで<link="https://www.karvan1230.com/">リンク</link>をとりだす。わからないので<link="https://www.google.co.jp/">Google</link>でしらべる。

と、複数のLinkタグが設定されている場合でも、それぞれに応じたURLを取得することができます。

f:id:Karvan:20210119220043g:plain

 つまり、これを利用すればテキスト文中からクリックされた箇所のワードを取り出して後の処理に利用することも可能だ、と言う事です。

 

クリック位置を取得する

先ほどの処理でクリックした文言を判定することが出来るので、後はそのワードを欄外へ移動すれば良いわけです。

移動用のTextMeshProをあらかじめ用意しておいて、それをクリックした位置から欄外へ移動させます。

 

uGUIでクリックした位置はRectTransformUtilityのScreenPointToLocalPointInRectangleを使うことでCanvas内のローカル位置を取得することができます。

 先ほどのOnPointerClick関数内に以下のコードを追加します。

 // クリック位置に対応するRectTransformのlocalPositionを計算する
 RectTransform rectTransform = canvas.GetComponent<RectTransform>
 var localPoint = Vector2.zero;
 RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTransform, pos, camera, out localPoint);

取得したlocalPointを移動用のTextMeshPro(のRectTranform)のlocalPositionに設定してDOTween等で移動を行います。

 

f:id:Karvan:20210119220604g:plain

こんな感じ。ちなみに上の動画ではクリックされたLinkタブの箇所にColorタブを追加して色を変更する処理も行っています。

 

IPointerClickHandlerとか今回始めて知りました。やっぱり賢者の方が作ったゲームは色々と勉強になりますね。

 

【Unity】複数のアニメーションをLayerを使ってブレンドする

大寒波

数年に一度の大寒波でこの三連休は一歩も外へ出ていない皆さんこんにちは。子供頃は雪が降ると大はしゃぎだったのに、大人になると憂鬱で仕方ないのは何故でしょう?

 

結果発表

unity1weekの評価期間も終わり、私の作品についても結果が発表されました。

相変わらず各指標が3点台という箸にも棒にも掛からぬ結果になったわけですが、振り返るともっと演出に力を入れたらよかったなぁとか、最初のステージをもっと簡素にしてボスを早めに登場するようにしたら良かったなぁとか、色々と反省点が思い浮かびます。

unity1weekのゲームを実況している方の配信を見たのですが、私のゲームに関しては、かなり簡単だと思っていた最初のステージすら苦戦しており、見せ場のボス戦にも到達できずじまいで終わっていました、こちらの意図通りに操作してもらう難しさを学びましたね。

 

unityroom.com

 

アニメーションを設定する

そんな今回の作品。いわゆるランゲームというやつで、キャラクターが走りながら敵を攻撃しゴールを目指す、という形式なのですが、自機となるキャラクターには「Cyber Girl」というアセットを使用しています。

assetstore.unity.com

このアセットを使用した理由は、unityroomに投稿されているゲームやtwitter等で目にする個人製作のゲームの殆どで主役となるキャラクターには女性が起用されていることに気づいたからです。

ゲーム制作者って圧倒的に男性が多いと思うのですがね、何故か主役が女性のゲームを作っている方が多い気がします。

理由は分かりませんがとりあえず需要があるのだろうと言う事で、元々制作中の脱出ゲームの為に購入していた「Cyber Girl」のモデルを自機とすることにしました。

 

しかし、このアセットはモデル単体のみが販売されているアセットなので、それだけではでくの坊のまま、当然ながら走るとか、攻撃するなんてアニメーションは自分で設定することになります。

 

f:id:Karvan:20210112210955p:plain

 アセットストアから購入した段階のモデル

 

なので、それらのアニメーションの方もアセットストアから購入しました。

プロモーションの動画を見ても滅茶苦茶カッコいい。

assetstore.unity.com

www.youtube.com

 

今回はこのアセットに梱包されている「走る」アニメーションと

f:id:Karvan:20210112211255g:plain

 

「攻撃」アニメーションを先程のCyberGirlのモデルに設定することにしました。

f:id:Karvan:20210112211400g:plain

 

動作をブレンドする

先程の3DモデルにはAnimation TypeとしてHumanoidが設定されているので、通常は設定したいアニメションをAnimtorで設定するだけで使用することが出来るのですが、今回の場合は「走りながら敵を攻撃」したいので「走る」動作と「攻撃」動作をブレンドする必要がありました。

 

こういった場合は「走る」動作をベースに「攻撃」動作を加算して作る方法があります。

まず、Animator ControllerのLayerを「走る」動作、「攻撃」動作それぞれで分けて設定します。

 

f:id:Karvan:20210112211635p:plain

 Base Layerに「走る」動作、Attack Layerに「攻撃」動作を設定します。

その後、Attack Layer側のBlendingに「Additive(加算)」を設定し、Weightで重みを設定します。

 

実際に動かしてみると・・・

f:id:Karvan:20210112211815g:plain

・・・ん~、なんか変。攻撃の動作に走っているときの姿勢が加わっているので前傾姿勢過ぎて攻撃している感がありません。

良く考えると「走る」動作に必要なのは「両足」だけなので、それ以外部分は「攻撃」動作させれば良いことに気づきます。

 

AvatarMask

こんな時はAvatarMaskを使って特定の箇所のボーンの動作を上書きするようにします。

 Avatar MaskはProjectタブで右クリック→Create→Avator Maskで作ることができます。

f:id:Karvan:20210112212110p:plain


Avator Maskでは四肢と頭、胴体それぞについてマスクするか設定できるので、今回は両足をマスクすることにします。

 f:id:Karvan:20210112212135p:plain

 

Attack Layer側のBlendingに「Override(上書)」に変更し、Maskの項目に作成したAvator Maskを設定します。

f:id:Karvan:20210112212201p:plain

 

これで実行すると

f:id:Karvan:20210112212245g:plain

 それっぽい動作をさせることが出来ました。めでたしめでたし。

 

【雑記】Unity1weekがUnity2weekになってしまった話

新年

年末年始は部屋から出ずに2077年のナイトシティで年を越した皆さんこんにちは。外付けSSDで拡張したPS4で遊んでいますが巷で報告されているほどエラー落ちはしませんね。激しい銃撃戦では落ちやすいみたいですが、私はチキンなステルスプレイ中心なので特に問題ありません。

 

Unity1week

年末から年始かけてUnityroomにてUnity1weekが開催されていました。

 unityroom.com

これは文字通り「Unity」を使って「1week(一週間)」で毎回決まったお題に沿ったゲームを作り、互いに評価してもらう、というイベントです。

現在(1/5)は未だ評価期間中で遅延での投稿も可能なので作品が出揃ってはいませんが、今回も440以上の作品が投稿されているようですね。

私も今回参加してアクションゲームを投稿しています。難易度低めとなっているので気軽に楽しめると思います。

 

unityroom.com

ただ、今回の作品については当初の想定以上に制作に時間が掛かり、Unity1weekならぬUnity2weekになってしまいました。

結果として年末年始の休暇は全てこれに取られた形になってしまったのですが、なぜこうなったのか反省も込めて振り返ってみたいと思います。

 

Unity1week開始前(~12/20)

去年からUnity1weekには度々参加しているのですが、毎回私はお題からゲームを考案するのでなく、その時作りたいと思ったゲームをお題に合わせる、という形で作業を進めています。じゃないとモチベーションが持たないので。

 

Unity1week開始前の時期は講談社のゲームクリエイターラボに落ちた直後だったこともあり、二期目の募集があった時に向けたプロトタイプの作成に取り組んでいた時期でした。

この時考えていたプロトタイプはボクセルアートっぽい箱庭を舞台としたアクションゲームです。

 

「ボクセルアート」とはファミコン時代のドット絵を立体化させたような感じで、立方体を組み合わせてつくる3DCGの事を指します。

Twitter等のSNSをチェックすると度々ボクセルアートの作品が投稿されているのを目にするし、インディゲーム界隈ではボクセルのゲームはソコソコ受けが良いみたい。

なのでボクセルアートのような一画面内に収まる狭い範囲の箱庭の中でSTGやACT、RPG等が再現ができればインパクトのあるものになりそう、そう考えて試しに簡単なランゲームを作っていました。

 

f:id:Karvan:20210105205820g:plain

自分の中では「良い感じ」にできたプロトタイプ。

 

お題発表、正式な開発期間(12/21~12/27)

今回のお題は「あける」だと発表がありました。開ける、明ける、空ける・・・幅広い意味でとらえる事ができる良いお題だと思います。

私は事前に作っていたプロトタイプがあるのでそれをお題に合わせて改変すれば期間内にできるな、と甘い考えを持ったままま、とりあえず「扉を開ける」方向でゲーム作成を進めることにしました。

 

一日目:ステージの端の表示がスムーズでないため、奇麗に見えるよう試行錯誤する(上のプロトタイプではブロックを置いて誤魔化しています)

二日目:ステージを横スクロールだけでなく上下にも動かしてみたくなり、実装に取り掛かる

三日目:ステージの上下に合わせて、周囲に下から上へ流れるCUBEが表示されるように変更

四日目:ステージの上下に合わせて、キャラクターのアニメ動作を設定する。タイミング合わせに苦労する。

 

・・・と、四日経過してステージが上下してキャラクターが飛び上がる演出しか完成しませんでした。なんでだろ?

でもまぁ、あとは障害物とか敵を表示できればゲームとしては成り立つし、きっと期限内に完成する。とその時は思っていました。

 

五日目:敵キャラが登場するようにオブジェクトプールとか色々作る。合わせてアニメ動作と当たり判定をつける。

六日目:扉の出現アニメーションを作成する。扉の移動と床のスクロール速度が合わずアレコレ試行する。

七日目(最終日):この段階でボス戦の実装に取り掛かる。絶対間に合わないのでTwitterに進捗報告を上げた後、サイバーパンクに現実逃避する。

 

この時の進捗具合はこんな感じ。ボス戦以外はそれとなく完成しているので遅刻しても2,3日中、もしくは年内には完成する想定でいました。

f:id:Karvan:20210105210147g:plain

 

遅刻期間(2020/12/28~2021/01/03)

12/28:画面はモノトーンベースの方がオシャレかも、などとトチ狂ってデザインを変更する

f:id:Karvan:20210105210019g:plain

 

12/29:急にボスを使徒ラミエルのように変形させたくなり、その実装で丸一日潰れる

f:id:Karvan:20210105210416g:plain

 

第一形態で心が折れたので二形態目は手を抜く。そして疲れを癒すためにサイバーパンクに現実逃避する。

f:id:Karvan:20210105210740g:plain

 

12/30:ボスにダメージエフェクトをつける。年内に完成しなくても良いんじゃいかと思えてきたので、サイバーパンクのACT1のサブクエを全てクリアする。

12/31:そういえば自機や敵のHPとかゲーム開始前後のUI作ってないなぁ、と思いながら、サイバーパンクのACT1をクリアする。

01/01:明日は頑張る、元旦ぐらいはいいじゃん、という気分でサイバーパンクのクエストを次々とこなしていく。

01/02:いい加減サイバーパンクが一区切りついたので、ゲームの開始画面とかゲームオーバーの演出とか色々作る

01/03:一通りが完成したのでビルドしてunityroomに投稿する

 

途中無駄に過ごした数日がありましたがとりあえず完成してよかったです。

評価期間中なので最終的な評価は分かりませんが自分としては満足する物が出来たと思っています。

まぁ、開発期間を一週間も延長すればそれなりの物は出来るよねぇ。とか嫌味が聞こえてきそうなので、今後は期限内に作成できるよう誘惑に負けない強い気持ちを持ちたいです。

【雑記】一年の終わりなので今年の活動を振り返る

年納

静音キーボードに買い替えたのに何故かAキーだけカタカタ音がする皆さんこんにちは。今週はUnity1Week期間中という事で、私も微力ながら参加しようと新規にプロジェクトを立ち上げたはいいものの、デフォルト画面のまま中々構想がまとまりません、どうしよう。

こんな時はTwitterに流れてくる他の参加者の進捗報告でも参考にしようかと思ったのですが、最近のTwitterトレンドは暇を持て余したジジババ政治豚のハッシュタグで溢れているのでTwitterを開く気にもなれません、どうしてくれよう。

とりあえずUnity1Weekの今回のお題は「あける」ということなので、なんとか期間内にお題に沿った作品を仕上げたいと思います。

 

unityroom.com

 

振り返り

今年も早いもので残り二週間を切り、忘年会も納会もないまま今週で仕事納めとなります。

振り返ってみると今年はStab of Bee Projectとして一本もゲームをリリースできず、BitSummitやデジゲー博などのイベントにも出展できず仕舞いに終わってしまいました。

Unityroomの方にイベントを利用して幾つか試作的な作品を上げたりはしたのですが、少なくとも年に一本ぐらいは正式な物をリリースしたいし、何かしらのインディゲームのイベントにも出展してみたい。

どちらかといえば停滞した一年だったかなぁ、と思って言います。まぁ今年の更新はこれで最後だと思うので、今年一年の活動をざっくりと纏めてみました。

 

1月~3月

去年から引き続き2.5DのSTG製作を行うが全然モチベーションが上がらず作業が進まかった、ってか面白い作品になりそうな気がしなかった。

自分でプレイして面白いと思えないのに他人が面白いと思うわけはないので作品の方向性を変えるか、作り直すか、中断するか大いに悩んだ時期でした。結果中断。

 

タイトル画面だけは満足する物ができたのですがね、口惜しいなぁ。。。

f:id:Karvan:20201222211722g:plain

 

気晴らしにUnity1WeekにSTGのボス戦をイメージした作品で参加。なぜか絵作りと雰囲気は評価してもらえた。ありがとうございます。

f:id:Karvan:20201222213450g:plain

unityroom.com

 

4月~6月

STG製作は完全になる気が無くなり、アセットストアでフレームワークとなるアセットを見つけたのを契機にアドベンチャーゲームの製作に移行する。

これが現在制作中の脱出ゲーム

www.youtube.com

 

GWにroom6のゲームジャムに参加。物理演算を使ったゲームに初めてチャレンジする。
個人的にはそこそこに面白いと思ったのですが、ゲームジャムの結果としては箸にも棒にも掛からぬ、といった具合。むぅ~・・・

f:id:Karvan:20201222213820p:plain

unityroom.com

 

7月~9月

フレームワークを使っているだけあって脱出ゲームの製作が順調に進む。キャラクターの移動とかカメラ操作とか細々とした機能を自作しなくてよいのでゲーム本編にリソースを割けるし集中することができる。

とは言え、アドベンチャーゲームなのにざっくりしたストーリーしか構想しておらず行き当たりばったりに作っている感もあった。

 

最初のステージ分だけ完成したのでUnity1Weekにかこつけて出来たところまでをアップしてみるが中々厳しい結果を突き付けられる。ポイントとなる点が色々と説明不足なのかもしれない。

 

f:id:Karvan:20201222214103g:plain

unityroom.com

 

10月~12月

Voodooのランゲームコンテスト、講談社のゲームクリエイターラボに応募するもどちらも見事に落選。

ランゲームコンテストの方は製作が期間内ギリギリだったのと、応募には稼働率を調べるための処理・設定を組み込む必要があって右往左往、もうこりごり。

ゲームクリエイターラボには現在制作中の脱出ゲームとSTGの企画を提出して脱出ゲームの方は予備選考には通ったらしい。

 

f:id:Karvan:20201222213944g:plain

落選はしたがゲームクリエイターラボに応募するためストーリーの構想を練らなければならず、お陰で結末まできっちりとストーリーを整理することができた。

同じ作品の評価は8月のUnity1Weekでは散々だったので自信がなかったが、予備選考に通ったことでとりあえず方向性は間違ていないように思える。

 

最後に

製作中の脱出ゲームは来年の春にはリリースしたいと思っています。そしてこれを引提げてBitSummitみたいなイベントにも参加できればな、と思います。あくまで希望ですが

それでは、少し早いですが今年一年ありがとうございました。
良いお年を!

 

 

【Unity】今更気づくDOTweenのFromオプション

寒波到来

今年はそれほど寒く無いなぁと油断していたら週明けから急に寒くなって、慌てて冬用のズボンを取り出して履いてみたらお腹が苦しい皆さんこんにちは。

TVを見ると最近は何でもかんでもGotoのせいになっているので、これもGotoのせいに違いないし、外付けのSSDを購入してディスク容量を拡大してまで準備していたサイバーパンク2077なのに画面端が見切れて遊びづらいのもGotoのせいに違いありません。ちなみにPS4(ノーマル)です。

 

プロモーション

現在3Dの脱出ゲームを制作しており前回の記事の中でプロモーション動画を掲載しましたが悲しいほど誰も見てくれないので再度掲載します。

 

youtu.be

画面がホラーゲームっぽい雰囲気ですが、ホラー要素は殆どないパズルメインの脱出ゲームとなっています。よろしくお願いします。

 

今更気づく

毎度お世話になっているDOTweenですが、先日何気にDOTweenのドキュメントサイトを覗いていたらMoveやScale等のTweenのメソッドにFromオプションが使えることが記載されていました。

 

dotween.demigiant.com

前々から使えたのでしょうかね?

私は全く気付いていなかったのでFrom系の動作をさせたい場合にはiTweenの方を使って実装していました。

 

www.karvan1230.com

From系が使えると知っていたら、初めからDOTweenを使って実装していたのに口惜しい限りです。

なので今回はFrom系オプションのご紹介

 

From系の動作

このFrom系のオプションがどういうオプションなのか、というと例えばDOMoveの場合だと

   オブジェクトを指定した座標から現在の座標へ移動する

という動作が可能になります。

 

 説明だけではあまりピンとこないかもしれませんが、実際に通常のDOMoveとFromオプションをつけたDOMoveで動作を比較すると一目瞭然になります。

f:id:Karvan:20201215221932g:plain

 

Fromオプションは他のTweenでも設定可能で例えばDOScaleにFromオプションをつけると

f:id:Karvan:20201215222048g:plain

 こんな感じに動作します。

 

また、3DオブジェクトだけでなくUIに関するメソッドにもFromオプションは使えるので、例えばDOColorで使ってみると

f:id:Karvan:20201215222147g:plain

元の色に戻ってくる動作となります。

 

何が利点なのか

このようなFrom系動作はTween後に現在位置に戻ってくる動作なので、エディタ上で調整した位置からわざわざ動かさなくても済む、というのが最大の利点になります。

 

主にUI系のパネル、ボタンやラベルなどのオブジェクトに関してはエディタ上で位置を調整して、ゲーム実行後はその位置から動くことは余りありませんが、ボタンクリック等でちょっとしたアニメーションをつけたい場合にFromオプションをつけてアニメーションを作ることができます。

 

下の動画ではDOAnchorPosにFromオプションをつけて黒のパネルを動作させています。

f:id:Karvan:20201215222302g:plain

 

Fromオプションを使いこなすことが出来れば色々と幅広いアニメーションを作れるのではないでしょうか。

なお、DOPathやDOPunch、DOShake等のメソッドはFromオプションに対応していないので詳細はドキュメントサイトを確認してください。

【雑記】インディゲーム支援企画に落選した話

年末

12月に入り会社から「今年はコロナ禍を考慮して忘年会及び年末の納会を中止しますが、大掃除は例年通り行います」との通知にやる気を一気に失った皆さんこんにちは。いやいや、密を避けるのは大事ですが大掃除も密になりますよ。

 

ゲームクリエイターズラボ

10月ぐらいに講談社がインディゲームの支援企画を立ち上げて、ゲームの企画を一般から募集しており、私も船に乗り遅れじと2企画ほどそれに応募していたのですが、つい先日発表になった一次選考の結果を確認すると、残念ながら私の企画はどちらとも落選したようです。

 

daysneo.com

まぁ、1250件超という応募の中から一次選考通過はおよそ50作品(最終的には5作品)という中々に狭き門だったので、落選も当然の事かと思うのですが、悔しい事はやっぱり悔しい。

 

SNS上では同じ企画の落選者が「供養」と称して選外となってしまったゲーム企画をnoteやTwitter等で公開しているのが散見されます。

なので私もその流れに乗るというか、落選したという事実と大掃除に駆り出されるという事実でやる気を失い、これといった進捗もないので丁度いいというか、落選企画について振り返ってみたいと思います。

 

STG企画

一つ目はSTGの企画。

去年一年間作り続けて途中挫折するも、今年初めにこれをベースにしたゲームをunity1weekに投稿したら以外に好評だったため、再度練り直した企画です。

 

f:id:Karvan:20201208233332p:plain

 

 コンセプトとしてはボス戦のみの2.5DSTGといったところなんですが、現在のところ未だ練り直し段階でプロトタイプとして動かせるものがない為、企画書では上のようなゲームのコンセプトイメージしか提示できず。

また内容もざっくりとした概要の説明のみが語られ、このゲームの魅力や他STGゲームとの違いについて上手く説明できていなかったと思います。

 

案の定、一次選考前の予備選考の段階で選外となってしまいました。

自分の中でもイマイチ精査しきれていないので、今後本格的に製作に取り掛かるとしても更なるブラッシュアップが必要だと感じています。

 

脱出ゲーム企画

二つ目は現在製作中の脱出ゲームの企画

このブログでも度々進捗を載せているように、ある程度動かせるものがあるし、ストーリーの方もほぼ固まっているので、企画書としてもゲームコンセプトや魅力、狙いついて可能な限り説明できていたと思います。

 

f:id:Karvan:20201208233631p:plain

 

また、実際のゲーム動画をPV風にアレンジして提出していたので、企画書では足りなかった部分もアピールできたのではないでしょうか。

 

こちらはその甲斐あってか予備選考は通過していました。

予備選考では300作品超選ばれていますがこれでも全体の3割ぐらいなので、その中に入れたという事は製作を続けていく糧になります。どうもありがとうございました。

 

なお提出したPVはYoutubeで公開しています。

www.youtube.com

 

今後について

提出した企画はどちらも選外となってしまいましたが製作は続けていく予定です。

特に脱出ゲームの方は来年春にでも完成するとは思うのですが、今回の落選で残念に思うのはローカライズやパブリッシングの支援を受ける当てが無くなってしまったこと。

 

ローカライズに関してはGoogle先生に尋ねながら頑張ってはいるのですが、いかんせん英語力には自信がないのでこの翻訳で本当に伝わるのが不安がぬぐえません。

また、パブリッシングについてはスマホアプリをリリースした経験から、無名のインディゲームが広く世間に知れ渡るという事は、よほどの幸運に恵まれない限り不可能だという事が分かっているので、どこかしらにパブリッシングを依頼する必要性は感じています。

しかし、どこにどのように依頼すればよいのか分からず頭を抱えている段階。(まぁこれは実際に完成してから考えよう)

 

、、、と落選を嘆いてばかりですが、今回の講談社の企画は「一期メンバー募集」らしいので、もしかすると来年もまた同じ企画の募集が行われるかもしれません。

また、集英社の方でもインディゲームに関する企画が立ち上がるという情報もあるので、希望を捨てず、それまでにゲームを作りながら研鑽を積んでいきたいと思います。

 

【Unity】DOTweenのPuchについて

新入社員

今年はコロナ禍により仕事はテレワーク中心になり、大規模な会議や飲み会は開かれず仕舞いだったので、顔も名前も覚えていない新入社員がいつの間にか辞めていた皆さんこんにちは。急に退職のお知らせメールが廻ってきてビックリ、自己紹介された記憶もないです。来年はどうなるんでしょうか。

 

Puchメソッド

f:id:Karvan:20201201221543g:plain

上の動画はDOTweenのDOPunchPositionを使ってオブジェクトを左右に振動させたアニメーションです。

このようにPunchとは指定された値とその反対方向の値の間(100なら100~-100の間)を減衰しながら振動して元の値に戻る、というTweenを行うときに使用します。

 

主にオブジェクトのTransformに対してDOPunchPositionやDOPuchScale,DOPuchRotateを使うケースが多いかと思いますが、staticメソッドとしてPunchメソッドも用意されており、このメソッドではプロパティの値を指定した値の間で増減させることができます。

 

DOTween.Punch(getter, setter, Vector3 direction, float duration, int vibrato, float elasticity)

getter:プロパティの値をトゥイーンに返すデリゲート
setter:プロパティの値をトゥイーンに設定するデリゲート
direction:パンチの方向と強さ
duration:トゥイーンの持続時間
vibrato:パンチの振動数(省略可)
elasticity:後方にバウンドする時の開始位置を超える量。0を指定すると開始位置と減衰方向の間でのみ振動します。(省略可)

 

 下の場合はmyVectorの値が(100,100,100)~(-100,-100,-100)の間を2秒間減衰しながら振動します。

// Punch upwards a Vector3 called myVector in 2 second
DOTween.Punch(()=> myVector, 
       x=> myVector = x,
       new Vector3(100,100,100),
       2);

 実際に動作させてみると・・・

f:id:Karvan:20201201222221g:plain

 早くて分かりづらいですが、振動中のベクトル要素のX,Y,Zは全て同じ値となっています。


では、directionで指定するVectorの値を(100,200,300)とX,Y,Zで異なる値にした場合はどうでしょう。

f:id:Karvan:20201201222310g:plain

これも早くて分かりづらいのですが、振動中のベクトル要素のX,Y,Zはdirectionで指定した値の比と等しい値となっています。

 どうやらPunchメソッドではX,Y,Zそれぞれでランダムな値で振動する、という事はないようです。

 

ではなぜPuchメソッドについて調べたかというと、現在製作中のゲーム内で一人称視点のカメラが振動するような演出を加えたかったからです。

 

画面効果に使う

当初はカメラそのものをDOPunchPositionで動かそうと考えたのですが画面酔いを起こしそうになるのと、Tween中のカメラ操作の影響が面倒だったのでカメラを動かすのではなく、ポストエフェクトを使って色収差のズレを振動せることにしました。

 

色収差ついては以前ブログの記事にも書きましたが、画面の色成分(RBG)をそれぞれずらして表示するというエフェクトです。

www.karvan1230.com

上の記事では「Fast Chromatic Aberration」(注)というアセットを使用して色収差のエフェクトを実装しています。

このアセットではRGBそれぞれで色ずれの量を指定することができるので、Punchメソッドを使って振動させたVectorの値をRGBそれぞれに指定するようにしました。

 

f:id:Karvan:20201201222632g:plain

どうでしょう。画面そのものは動いてませんが色ずれの量が変動することで画面全体が揺れているように見えると思います。
今回はPunchメソッドの使用例の紹介でした。

 

(注)このアセットはバージョンアップにて魚眼レンズ効果も追加されており、現在のところ、その効果を0にすることができない(画面端が必ず歪む)ようです。そのため色収差のみのエフェクトを期待する場合は注意が必要です。

◇プライバシーポリシー

●個人情報の利用目的

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

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

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

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

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

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

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

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

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

●免責事項

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

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

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

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

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

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