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

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

【Unity-C#】Interfaceの利点を学ぶ

f:id:Karvan:20210615212000p:plain

 

ありがとうIndie Live Expo

ブログの閲覧数がやたら増えているなぁと不思議に思っていたらIndie Live Expoで紹介されたお陰だと気づいた皆さんこんにちは。6時間近く放送された番組の中で15秒ちょっと映っただけなんですがね、紹介されたところで誰も気に掛けないだろう、とやさぐれていた自分が恥ずかしいです。どうも有難うございます。Twitterのフォロワーもちょくちょく増えてほんとビックリ。

 

Interface

さて、UnityのスクリプトはC#が標準なのでInterfaceを定義して使う事ができます。
InterfaceとはC#の参考書などによれば「クラス外部からみた規約だけを定めるもの」とうたわれており、それがピンとこない場合は「実装がないメソッド定義をアチコチで使い回すもの」とでも思えば良いです。

 

例えばゲーム内に敵A、敵Bがおり、それぞれに独自の制御用クラス(EnemyA_Control,EnemyB_Control)が実装されているケースを考えてみます。

Manager的なクラスが敵A,Bにゲーム内のイベント(ゲーム開始や終了等)に応じた処理を依頼する場合、ManagerクラスはEnemyA_Control,EnemyB_Controlそれぞれのクラスを意識して「EnemyA_Controlのゲーム開始時処理」「EnemyB_Controlのゲーム開始時処理」をコールする必要があります。

f:id:Karvan:20210615212336p:plain

 

 敵が二種類しかいない場合はそれでも構いませんが、敵の数が増えていくと面倒くさいことこの上ない。
処理を依頼するタイミングは同じなのだから(クラスは違えど)コールするメソッドも同じにすることができればコーディングの量も減って以後の作業も楽になります。
なので、そういった要望を実現するためにInterfaceは使用されます。

f:id:Karvan:20210615212613p:plain

 

定義と使い方

インターフェースを定義するには「interface」を使用します。interface内のメソッドやプロパティなどはすべてpublicとして扱われます。

    interface (インターフェース名){
        メソッド名(引数);
        メンバー変数;
        ...
    }

実装側はクラスの継承定義を同じようにインターフェース名を設定します。

    public class クラス名 : (継承クラス名), (インターフェース名)
    {
        メソッド名(引数);
        メンバー変数;
        ...
    }

ここで実装側はInterfaceが持つメソッド、プロパティなどをすべて実装する必要があることに注意が必要です。
(定義のみで中身は空でもよい)

具体的に、先ほどの敵A、Bにゲーム開始時処理のInterfaceを実装したい場合

    // インターフェース定義
    interface IEnemyInterface {
        void StageStartProc();    // ゲーム開始時処理
    }

上記のインターフェース定義を行った後に、各制御用クラスにインターフェース定義を追加します。

    // 敵A側
    public class EnemyA_Control : MonoBehaviour, IEnemyInterface {
        
        void StageStartProc() {
            // 敵Aのゲーム開始時処理
            
        }
    }

    // 敵B側
    public class EnemyB_Control : MonoBehaviour, IEnemyInterface {
        
        void StageStartProc() {
            // 敵Bのゲーム開始時処理
            
        }
    }

 

マネージャークラス側はGetComponentでクラス名でなくインターフェイス名を指定してコンポーネントを取得、ゲーム開始時処理をコールします。

    public List<GameObject> EnemyList;    // 敵A,Bが格納されたリスト
    
    // ゲーム開始時処理
    void StageStart()
    {
        foreach(GameObject obj in EnemyList)
        {
            // インターフェイス名を指定してコンポーネントを取得
            IEnemyInterface objIF = obj.GetComponent(typeof(IEnemyInterface)) as IEnemyInterface;
            
            // ゲーム開始時処理をコール
            objIF.StageStartProc();
        }
    }

Interfaceを利用するとクラス間の疎結合も可能なので色々と利点が多いと思います。

 

【Unity】ステンシルバッファを使って窓を作る

f:id:Karvan:20210608213544j:plain

全く話題にならない神ゲーム

後学の為に色んな実況者のゲーム実況を観ていたらYouTubeのお勧めが何故かVtuberの切り抜きで溢れている皆さんこんにちは。ロックマン2の実況が面白くて色々観てたらこうなった。でも、Vtuber同じような名前大杉。

そんな中、久しぶりに購入したゲームが神ゲーでした。タイトルは『The Pathless(ザ・パスレス)』。最近流行ってきたトゥーン調のオープンワールドゲームで、『ABZU』の開発会社による新作アクションパズルゲームです。

f:id:Karvan:20210608213647j:plain

美しいグラフィックと爽快感のある操作性が最大の魅力で、フィールド内を移動するだけでも楽しい。加えてフィールド内に点在するパズルもプレイヤーの観察力を問われる内容で程よい難易度。本当に神ゲーと呼ぶにふさわしいと思うのですが、巷では全く話題になってません。実況動画も攻略サイトも殆どないし。

思うにオープンワールドながらもゲームのメインがパズルなのでボス戦以外に戦闘とかないし、NPCと会話や取引するみたいなイベントもなく全く実況向きでない、実際にプレイしてみないと良さが殆ど伝わらない事が原因なのではないかと。

個人的にあまりに惜しいのでこのブログで紹介しています。
とにかく爽快感のあるゲームがやりたい方、異世界を自由に探索するゲームに興味がある方にはうってつけのタイトルだと思いますので、是非、プレイしてください。

 

 ステンシルバッファ

unityのシェーダでステンシルバッファは描画の際に当該のピクセルを画面に表示するかしないかを決める「マスク」を設定する役目を持ちます。

要はマスクなので「描画したい部分」「描画したくない部分」を明確に定義できるというわけです。

ステンシルバッファの操作はStencilのプロパティを使用します。Stencilのプロパティの宣言は次のようになります。

Ref ステンシルに書き込む値
Comp 使用する比較関数
Pass 比較関数が真のときにの操作

 

 ・比較関数

Greater ステンシル値がバッファ値より大きいピクセルのみレンダリング
GEqual ステンシル値がバッファ値以上のピクセルのみレンダリング
Less ステンシル値がバッファ値より小さいピクセルのみレンダリング
LEqual ステンシル値がバッファ値以下のピクセルのみレンダリング
Equal ステンシル値がバッファ値と等しいピクセルのみレンダリング
NotEqual ステンシル値がバッファ値と等しくないピクセルのみレンダリング
Always 常にステンシル テストは成功
Never 常にステンシル テストは失敗

 

・処理

Keep バッファの現在コンテンツを保持します
Zero バッファにゼロを書き込みます
Replace ステンシル値をバッファに書き込みます
IncrSat バッファの現在値を増分させる
DecrSat バッファの現在値を減分させる
Invert すべてのビットを無効にする
IncrWrap バッファの現在値を増分する。値がすでに 255 の場合は 0 にする
DecrWrap バッファの現在値を減分する。値がすでに 0 の場合は 255 にする

 

窓を作る

「描画したくない部分」を作れると言う事は3Dモデルの形状を変更せずに穴を開けられる、と言う事でそれを利用して窓を作ってみます。手順は

  1. 窓となるオブジェクトにStencilでマークするシェーダを適用する
  2. 壁側のオブジェクトにはStencilでマークされた場所以外を描画するシェーダを適用

となります。

まず最初に窓側のオブジェクト用に透明shaderを作ります。

Shader "WriteStencil"
{
    SubShader
    {
        Tags { "RenderType"="Transparent" "Queue"="Transparent" }
        ZWrite Off
        Blend SrcAlpha OneMinusSrcAlpha

        Pass
        {
            CGPROGRAM
           #pragma vertex vert
           #pragma fragment frag
            
           #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
            };

            struct v2f
            {
                float4 vertex : SV_POSITION;
            };
            
            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                return o;
            }
            
            fixed4 frag (v2f i) : SV_Target
            {
                // 透明にする
                return fixed4(0, 0, 0, 0);
            }
            ENDCG
        }
    }
}

 このシェーダにStencilのプロパティを追加します。(CGPROGRAMの上あたり)

// ステンシルバッファの設定
Stencil
{
    // ステンシルの番号
    Ref 2
    
    // Always: このシェーダでレンダリングされたピクセルのステンシルバッファを「対象」とするという意味
    Comp Always
    
    // Replace: 「対象」としたステンシルバッファにRefの値を書き込む、という意味
    Pass Replace
}

 

壁を作る

壁用に標準的なStandardシェーダを作ります。これはCreateメニューから選んで作ることができます。

f:id:Karvan:20210608215255p:plain

 

この作成したStandardシェーダにStencilのプロパティを追加します。

// 壁側のStencil
Stencil
{
    // ステンシルの番号
    Ref 2
    
    // NotEqual: ステンシル番号がバッファ値と等しくないステンシル番号のピクセルのみレンダリング
    Comp NotEqual
}

 

 結果

作った窓シェーダーと壁シェーダーをそれぞれ3dモデルに適用してみます。

f:id:Karvan:20210608215756g:plain

壁を透過して背景が表示されているのが分かると思います。
ステンシルバッファを利用してモデルを変更することなく窓を作ることができました。

【Unity】総合エフェクトツール「Feel」を使ってみる

f:id:Karvan:20210601214309p:plain

散々

注文したPCの納期が半年後だったり、購入したゲームは画面酔いが酷かったり、無くしものをしたり、落とし物をしたり、贔屓のスポーツチームは負けたり、と散々な日々を過ごしている皆さんこんにちは。
iPad版のDAZNが「問題が発生しました。しばらくたってから再度お試しください」のメッセージを表示するようになって、かれこれもう一週間以上経っているのに未だに「しばらくたってから・・・」のメッセージを表示し続けているのですが、一体どれだけ待てば良いのでしょうかね?
ちなみにアプリを再インストールしても結果は同じでした。

 

Feel

前回の記事で紹介したUnityのアセット「Feel」
どんなアセットかと言うと"ゲーム内で発生する様々なイベントに合わせたエフェクトの詰め合わせ"といった感じのアセット。
音声、カメラ、パーティクル等々を利用したエフェクトを簡単に実装できます。

assetstore.unity.com

とは言え、購入したアセット内には導入法等が記載されたドキュメント類は含まれていない為、使い方を知るにはWebサイトを参照する必要がありました。
なので今回の記事では導入手順と簡単な実装例を紹介したいと思います。

 

導入手順

「Feel」のエフェクトをフルで使うには以下のパッケージを事前にプロジェクトに導入しておく必要があります。

  • Cinemachine
  • 2D Animation
  • Post Processing

どのパッケージもPackageManagerからインストールすることが出来ます。(無料です)

「Feel」のエフェクトを使うには空のオブジェクトに「MMFeedbacks」コンポーネントを付与し、このコンポーネントから実装したいエフェクトを追加していきます
この[空のオブジェクト+「MMFeedbacks」コンポーネント]は実装したいエフェクト単位に作る必要があります

例えば「煙のパーティクルが発生する」と「画面(カメラ)が揺れる」エフェクトを同時に再生したいのであれば、一つの「MMFeedbacks」コンポーネントに「パーティクル再生」のエフェクトと「カメラシェイク」のエフェクトを追加します。
f:id:Karvan:20210601214735p:plain

 

別々に再生したいのであれば、[空のオブジェクト+「MMFeedbacks」コンポーネント]を二つ用意して、一つに「パーティクル再生」のエフェクト、もう片方に「カメラシェイク」のエフェクトを追加します。

f:id:Karvan:20210601214749p:plain

 

簡単な実装例

実装例として下の動画のような単純に飛び上がるCubeに対して「Feel」のエフェクトを追加したいと思いまます。

f:id:Karvan:20210601215017g:plain

CubeはAddFroce(Impulse指定)を行う事で飛び上がっています。この時rigidbodyの回転については全軸freezeの設定をしています。

この状態でシーン内に空のGameobject(JumpFeedback)を追加します。

f:id:Karvan:20210601215130p:plain

 

JumpFeedbackにMMFeedbacksコンポーネントを追加します。

f:id:Karvan:20210601215155p:plain

 

このMMFeedbacksコンポーネントにジャンプ中に回転するエフェクトを追加します。
MMFeedbacksコンポーネントの「Add new feedback」を押すと追加するエフェクトが選択できます。今回は「Transform→Rotatin」を選びます。

f:id:Karvan:20210601215252p:plain

 

MMFeedbacksに[Rotation]が追加されるので「Rotation Target」にCubeオブジェクト(Model)を指定します。

f:id:Karvan:20210601215519p:plain

 

「Remap Curve One」に回転角度「90」を指定、X軸周りに廻すので「Animate X」のみにチェックを入れます。

f:id:Karvan:20210601215545p:plain

この状態で再生ボタンを押すと「Playボタン」が有効になるので押してみると

f:id:Karvan:20210601215635g:plain

Cubeが90度回転するのが分かります。

このエフェクトをジャンプ中に再生するようにスクリプトを修正します。今回の場合はJump開始のタイミングで再生します。

f:id:Karvan:20210601215700p:plain

これを実行してみると

f:id:Karvan:20210601215718g:plain

こんな感じ、ジャンプ中にクルッと回るようになりました。

 

さらにエフェクト追加

次は着地時にカメラシェイクのエフェクトを実装します。
最初にCinemachineのバーチャルカメラ(CM vCam1)を作成し、

f:id:Karvan:20210601215922p:plain

このバーチャルカメラに[Cinemachine Impulse Listener]を追加しておきます。

f:id:Karvan:20210601220038p:plain

 

次に空のGameobject(LandingFeedback)を作成→MMFeedbacksコンポーネントを追加します。
「Add new feedback」を押して「Cinemachine Impulse」を追加します。

f:id:Karvan:20210601220113p:plain

 

これをUpdate内でrigidbodyの速度が下向きに転じたあたりでMMFeedbacksを再生するようにします。

f:id:Karvan:20210601220146p:plain

 

実行すると

f:id:Karvan:20210601220208g:plain

着地時に画面が揺れるエフェクトが実装されました。

 

さらにー

同じ手順でLandingFeedbackのMMFeedbacksにポストエフェクトも追加して設定すると、

f:id:Karvan:20210601220255g:plain

最終的にこんな感じになりました。
一番最初の動画と比べてかなり印象が違って見えると思います。

 

【Unityアセット紹介】神は細部に宿るのか?総合エフェクトツール「Feel」

f:id:Karvan:20210525204531p:plain

PC購入

ウキウキで新しいPCを注文したら納期は半年後だと知らされて一気に萎えた皆さんこんにちは。注文のページには"3~4週間後に納品"と書いてあったのですがね。PC部品の需要増加が影響しているらしいのですがちょっと騙された気分です。

 

神は細部に宿る

つい先日開催されていたunity1weekのオンライン共有会でも話題に上がっていましたが、昨今ではGameJamなどで短期間開発が前提となるゲームでもある程度の完成度が求められており、unity1weekのようなイベントでも斬新さで押す、一発ネタで押すようなゲームは中々評価されない(上位にランクされない)傾向となっています。
ゲームとしての完成度を上げる、もしくは完成度が高いとプレイヤーに思ってもらえるには、ゲーム内容だけでなくディテールにも目を配ってプレイヤーのゲーム体験を上げる必要があります。

 

ここでディテールとは何を指すのかというと、UI等も含めてゲーム画面の配色に統一感を出す、ステージクリアおよび遷移時の演出にもこだわる、ボタン等を触った時にUIがアニメーションなどのリアクションを返す等々ありますが、どれもそれを実装するには時間が掛かってしまい、短期間で作業を収めようとすると無理が出てきます。

 

最近リリースされたアセット「Feel」はそうしたゲーム内で発生しうる様々なイベントに合わせたエフェクトの詰め合わせとなっており、これにより短期間の開発でも細部にこだわった演出を作る事が可能となります。
例えば下の動画のような回転するタイヤに合わせて「煙のパーティクルが発生する」「画面(カメラ)が揺れる」「ノイズが走る」等のエフェクトをつける事は「Feel」内のエフェクトを使用すれば簡単に実装できます。

f:id:Karvan:20210525204744g:plain

 

Feelというアセット

「Corgi Engine」や「TopDown Engine」の作者が作ったアセットらしく、レビューを観てもかなり有用と評価されています。

assetstore.unity.com



このアセットは以前リリースされた「MMFeedback」というアセットのアップグレード版らしく「MMFeedback」を購入済みの場合は無料でアップグレードできるようです。
なので「MMFeedback」と「Feel」を同時に購入する必要はありません。
また、「Corgi Engine」や「TopDown Engine」を持っている方もその中に含まれるエフェクトで十分なら購入する必要はない思います。

 

「Feel」に含まれているエフェクトの種類は多岐に渡り

  • Audio:再生、停止、ピッチ変更、エコー等の音声エフェクト
  • Camera:Shake,Zoom,Fade等のカメラエフェクト
  • Gameobject:Animationの再生、Rigidbodyに対するAddForce等
  • Particles:パーティクルの再生、停止
  • PostProcessing:Bloom,色収差,Vignette等のポストエフェクト
  • Renderer:Materialの変更、TextureOffset変更、Fog等
  • TextMeshPro:フォントサイズ、Color等の文字エフェクト
  • Time:ゲーム内時間の変更
  • Transform:移動、回転、スケール等のTween系処理
  • UI:移動、回転等のTween処理やColor変更

等々、ゲーム制作時に必要となる100種類以上のエフェクトが用意されています。

 使用例となるデモを参照すると

f:id:Karvan:20210525205453g:plain

こんな事や

f:id:Karvan:20210525205521g:plain

こんな感じのエフェクトが実装できるらしい。

 

注意点

上記のように多種多様なエフェクトが含まれていますが、それらすべてが「Feel」単体で実装しているというわけではないようで、「Feel」の導入には事前に

  • Cinemachine
  • 2D Animation
  • Post Processing

上記のパッケージをプロジェクト内に導入しておく必要があります。
特にCamera関連のエフェクトはCinemachineのVirtualCameraを使用して設定するので導入は必須です。

また、残念な事に導入法等が記載されたドキュメント類は含まれていない為、詳しい使い方はwebサイトを参照することになります。
各エフェクトの設定値に関するリファレンスもwebサイト参照です。
これだけ数があるのにちょっと不便ですね。

導入法もちょっと独自なのでアセットを購入しただけでは直ぐには使えません。
導入の仕方については次回の記事で紹介したいと思います

【Unity】Unity1weekに大幅遅刻したことを反省する。

f:id:Karvan:20210518201035p:plain

英断

五輪中止を暗に訴えている報道番組を見ながら「だったら『我が局は五輪の中継は一切しません』とか宣言すればよいのに」と思っている皆さんこんにちは。報道陣が会場に行かなければその分感染リスクは減るのにね。英断を願います。そういえば「五輪を開催したら日本が分断する」とか言っていた演出家はきっとご自身の舞台は中止している事でしょう。

 

調子に乗る

さて、GW前から開催されていたUnity1weekですが、評価期間が終わりつい先日その結果が発表されました。
私が今回投稿した「The two met」は総合13位となりました。

f:id:Karvan:20210518201222p:plain

f:id:Karvan:20210518201300p:plain


前回の作品「Supra Animus Quo」が余りに色んな方々から褒められた為、同じような評価は貰えないだろうと勝手にプレッシャーを感じていたのですが、思った以上の結果を頂く事ができました。ありがとうございます。

部門別でも6部門全てでランク入りと前作に続いて高い評価を頂いて驚くばかりです。

楽しさ f:id:Karvan:20210518201351p:plain 絵作り f:id:Karvan:20210518201421p:plain
サウンド f:id:Karvan:20210518202700p:plain 雰囲気 f:id:Karvan:20210518201500p:plain
操作性 f:id:Karvan:20210518201512p:plain 斬新さ f:id:Karvan:20210518201526p:plain

とは言え、開発に時間が掛かり過ぎたのは事実で(およそ一週間強の遅刻)、作品自体には色々と反省点も多いです。
一体何が原因だったのでしょうか?今回は制作過程を振り返ってその原因を探ってみたいと思います。

 

反省

1.構想決めに時間が掛かった

お題が「2」という事でしたが、毎度私の場合はお題からゲームを構想するのではなくて、その時作りたいゲームをお題に合わせる形で構想を練ります。
今回の場合は今現在、猫が主役となるゲームを作っている最中なのでそのゲームの前日譚となるようなゲームにすることを決め、なにか「2」となる要素が取り入れられないかとアレコレと案を練ったのですが全然纏まりませんでした。

ゲーム部分はワンクリック式のカジュアルゲームとしてプロトタイプまでは作れたのですが、それを「女性が道端で出会った猫を拾う」というストーリーにどうやって絡めていくか、という事に相当頭を悩ませました。

プロトタイプのゲーム画面

f:id:Karvan:20210518200922g:plain

 

ストーリー仕立てに悩んだ試行錯誤版

f:id:Karvan:20210518003750g:plain

上の動画のように猫を自機に見立てたバージョンも作ってみたのですが自分的にしっくりこず。結局ゲームパートとストーリーパートが交互に表示される形式としました。

 

2.スケジューリングが甘かった

今回のUnity1weekはGW期間中だったという事もあり、普段の回より自宅での作業時間を多く作れるので多少開発ボリュームがあっても大丈夫だろう、と予測していたのですが読みが甘い結果となりました。

 

とにかくストーリーパートに時間が掛かる。

 

f:id:Karvan:20210518003542g:plain

このオープニングに一日ぐらい費やし、、

 

f:id:Karvan:20210518003221g:plain f:id:Karvan:20210518003358g:plain

上の動画のシーン。彼氏に振られた女性が電車に乗り込む、というだけの場面ですがこれだけのシーンを作るのにも1日半ぐらいかかりました。
(はてなブログの動画サイズ制限に引っ掛かるため二つに分けています)
舞台(堤防と駅)の設定、アニメーション動作、カメラの配置と切替・・・やる事が沢山。

 オープニングから上の動画のシーンを作ったところでGWが終了してしまい、もうこれは完成しないかも、と開発中は何度も思いました。
なので、エンディング以外のステージ2,3,4のストーリーパートは当初の構想から色んなカットをざっくりと削ったものとなっています。

 

 3.そして固まるUnityと落ちるPC

開発には購入して7,8年になるPCを使っているのですが、購入当初でも特に性能が高い機種というわけでなく、単純なビジネス用PCとして購入したので流石にUnityでゲーム開発をするには限界が来ているようです。Unityを立ち上げているとずっとファンの音が五月蠅いし。

この為なのか、コーディング→ビルド→デバッグを繰り返しているとUnityが固まりだし、Inspectorから値が代入できなくなったり、Sceneビューでモデルを回転できなくなったり、挙句はPCもろともブルー画面へ遷移したり、と動作不良に悩ませる事数回。中には二時間分の作業が泡溶けた事もありました。

ゲーム完成後、WebGLにプラットフォームを切り替えている途中でUnityが落ちた際には目の前が真っ暗に、まぁなんとか無事でしたがこの出来事もあって新しいPCの購入を決断しました。

 

なんとか完成できた

そんな苦労を重ねながらようやく完成したのが評価期間終了4日前の水曜日深夜。Unity1weekには何度も参加していますが開発にこんなに時間が掛ったのは初めてです。
ここまで遅刻すると投稿すること自体憚れそうですが、投稿をお知らせするTweetにも「いいね」を下さったり、コメント欄にも遅刻を責めるような声もなく、それどころかこんなに評価を頂くことが出来ました。本当にありがとうございます。

今回なにより嬉しかったことは、公開から評価期間終了まで4日ほどしかなかったにも拘わらず閲覧数が800件強と過去最高を記録したという事。
前回でも300件強だったのでうれしい驚きです。今後も継続できるように頑張ります。

 

謝辞

今回のゲームのBGMは全てしゃろう氏が作成されたフリーBGMを使用しています。

www.youtube.com

氏の作られる温かみのある優しい音楽に惚れ込み、使用させていただきました。
本作品がランクインできたのもこのBGMのおかげだと思います。ありがとうございました。

 

最後に

 コメント欄に「難しい」「クリアできない」という声があったので、ゲーム開始からエンディングまでのプレイ動画を作成しました。

クリアまで遊ぶの面倒くさかったり、エンディングが気になる方は動画をご覧ください。

 

youtu.be

【雑記】Unity3Week開催中

f:id:Karvan:20210511222349p:plain

先延ばし癖

今年のGW休暇は長いから少しぐらい遊んでも余裕だろう、と思っていたら予想以上に時間が掛かって、未だに先が見通せない皆さんこんにちは。何のことでしょう?unity1weekの事です。

毎年この時期には恒例で行われているようで、今年もご多分に漏れず開催されています。まぁ、開発期間はとっくに終わっているんですがね。

 

unity3week

なんか参加するたびに毎回同じような事を書いているような気もしますが、例によって例のごとく遅刻です。終わっていません。ビルドとかしてない、ごめんなさい。

これまで参加したunity1week史上で過去最長の開発期間となっています。もうunity3weekですよ。評価期間が2週間あってよかった。(良くない)

f:id:Karvan:20210511222516g:plain

 何故こんなに時間が掛かってしまったのか等は次回の更新で振り返りたいと思います、完成したら。そう、無事に完成したらね。

取りあえず頑張ります。

 

【雑記】Unityアセットセールでおすすめのアセット

f:id:Karvan:20210427215159p:plain

二年連続二回目

コロナ禍が収まる気配なく今年も部屋に引き籠るGWとなってしまった皆さんこんにちは。はいそこ、いつも通りとか言わない。

 思い起こさせば去年のこの時期は、会社が分散出勤で休みは多かったけど行くはずだったコンサートが中止になり、サッカーも野球も休止中で百貨店も軒並み休業してたり、仕方ないので『おうちGameJam』とやらのイベントに参加してゲームを作ってブログを書いても、貰えるはずだったUnityアセット10%割引クーポンを未だ貰ってなかったり、と散々な時期でしたが、今年はどうなんですかね?

特に見たいアニメもやりたいゲームもないので、結局ゲーム開発で時間を潰すことになりそうです。

 

春のアセット大セール 5/1 15:59まで

そんな中、Unityアセットストアで『春の大セール』が開催されています。

assetstore.unity.com

 

5/1の15:59までと、何故か中途半端な時間帯で終了しますが500以上の人気アセットが50%オフで購入することができます。

加えて日替わりで特定のアセットが70%オフになるのでかなりお得です。

今回はそのセール対象アセットの中でも私が実際に使用しておすすめしたいアセットを紹介します。

 

おすすめアセット

RayFire for Unity $187→$93.5

assetstore.unity.com

破壊系のアセットです。3Dモデルをバラバラに粉砕する事が出来ます。
破壊によるメッシュ分割から物理演算による破片の飛散まで簡単に実装することができます。お値段が高めですがその分かなり優秀です。
使い方等は当ブログで記事にしています。購入の参考にしてください。

www.karvan1230.com

 

Koreographer Professional Edition $165→$82.5

assetstore.unity.com

ゲーム内の処理をBGMと連動させたい場合に使用するアセットです。
楽曲に合わせて事前に設定したタイミングでイベントを発行してくれるので、リズムゲーの作成やゲームの演出に凝りたい場合などに有用となります。

こちらも紹介記事を書いているので参考にしてください。

www.karvan1230.com

 

Odin - Inspector and Serializer $60.5→$30.25

assetstore.unity.com

これはUnityでゲーム制作をするなら必須になるアセットだと思います。
Inspectorの表示や機能が拡張され圧倒的に使いやすくなります。

このアセットの使い方をまとめた記事はあちこちに書かれていますが、下のリンクの記事が纏まっていておすすめです。

baba-s.hatenablog.com

 

Easy Save - The Complete Save & Load Tool for Unity $75.9→$37.95

assetstore.unity.com

Unityの標準機能にはファイルの読み込み・書き込みするAPIが用意されていますが、より簡便に安全性も保ってゲーム内情報を保存・参照できるアセットです。
SAVE/LOAD機能の作りこみが大幅に削減されると思います。

紹介記事は以下

szmiyako.blogspot.com

 

 Beautify 2 $49.5→$24.75

assetstore.unity.com

フルスクリーンの画像後処理効果で、リアルタイムで画質を向上させ、非常に鮮明で鮮明なシーンを生成します。
簡単にゲームの見栄えを綺麗にすることができます。
光のフレア効果やOutline、Vignetting(画面フレーム)も用意されているのでアレコレ絵作りに凝りたい場合はかなり有用です。

紹介記事は以下

www.unitygamebox.com

 

この他にも便利なアセットが沢山セールとなっているので、一度チェックされてはどうでしょうか?
(丁度unity1weekも開催されているし)

◇プライバシーポリシー

●個人情報の利用目的

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

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

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

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

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

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

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

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

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

●免責事項

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

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

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

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

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

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