Raspberlyのブログ

Raspberlyのブログ

Unityネタをメインとした技術系ブログです。にゃんこ大戦争や日常なども。そろそろブログタイトル決めたい

【アセット紹介】Thalassophobia: Stylized Oceans【Unity】

今回はアセットの紹介をしていきます。
紹介するのはThalassophobia: Stylized Oceans
水中環境を構築する3Dモデルアセットです。

f:id:Raspberly:20220307014204p:plain

f:id:Raspberly:20220307023123p:plain

 

 

バンドルセール情報

現在アセットストアでは、ウクライナを支援するメガバンドルセールを開催中!
詳しくは↓のバナーからどうぞ

f:id:Raspberly:20220307015843p:plain

今回紹介する「Thalassophobia: Stylized Oceans」も対象アセットです。

 

 

3Dモデルのアセットなのでササッと動かすところまで

どんなアセット?

水中環境を構築する3Dモデルアセットです。
シェーダー、エフェクト、魚のモデルなども含まれています。

f:id:Raspberly:20220307004948p:plain

カスタムシェーダー、動的に移動する昆布、カラフルなサンゴ、未来的な海の基地を使用して、大規模で詳細な水中世界を構築します。 

 

以下を含む660のプレハブ

  • 375匹の熱帯魚と2匹のサメ。
  • 61のシーベースパーツ。
  • 57種類の珊瑚と昆布。
  • 複数のバリエーションを持つ2種類の氷山。
  • アニメーション用にパーツが分離された2隻の潜水艦。
  • 35個の水中テンプルピース。
  • 18の難破船の破片。
  • 40個の大きな岩と19個の小さな岩。

 

カラフルに様式化されたレンダリングツール

  • ビルトインとURPの両方をサポートします。
  • すべてのシェーダーは、簡単にカスタマイズできるようにAmplify ShaderEditorで構築されています。
  • 様式化されたフォグ、苛性クッキー、および水面シェーダー(組み込みのみ)。
  • 流れに揺れるダイナミックな珊瑚と昆布のシェーダー。
  • 最大4つのスプラットをサポートする組み込みのレンダリングパイプライン用のテレインシェーダー。
  • シェーダーレベルで水泳サイクルをシミュレートするシンプルな魚のシェーダー。

 

 

実行環境

Unity 2020.3.26f1

URP 10.8.1

Thalassophobia: Stylized Oceans ver1.0.2

 

 

 

インポートの確認

アセットインポート完了時はこんな感じです。

f:id:Raspberly:20220305153805p:plain

 

URPの対応

アセットをURPに対応させるには
Assets/Distant Lands/Thalassophobia - Low Poly Oceans/Custom Render Pipelines/Import for URP.unitypackageをインポートします。

f:id:Raspberly:20220307000042p:plain

今回はURPプロジェクトで動かします。

 

デモシーンの確認

Assets/Distant Lands/Thalassophobia - Low Poly Oceans/Scenesにデモシーンが用意されています。

f:id:Raspberly:20220307001617p:plain

Coral Reef

f:id:Raspberly:20220307004948p:plain

Deep Sea Base

f:id:Raspberly:20220307005131p:plain

Dusk Forest

f:id:Raspberly:20220307005221p:plain

Kelp Caves

f:id:Raspberly:20220307004839p:plain

 

 

実際に試してみる

デモシーン内を歩いてみます。
キャラクターモデルはお馴染みユニティちゃんを使います。

raspberly.hateblo.jp

 

ポストプロセスとしてBeautify2も使用しています。

raspberly.hateblo.jp

 

動かしてみるとこんな感じ
海藻が生えていますが、ゆらゆらアニメーションしています。
エフェクトや魚などの小道具がたくさん用意されているのもうれしい。

f:id:Raspberly:20220307022820g:plain

f:id:Raspberly:20220307023044g:plain

動画バージョン

 

 

 

 

魚の群れシステム

ちっちゃい魚の群れ(fish school)をコントロールするコンポーネントが用意されています。

f:id:Raspberly:20220307020821g:plain

 

関連するコンポーネントは2つ

Global Flock:魚のプレハブを生成し、Targetに向かうように動きを制御するコンポーネント

Move Fish School:Global Flockが参照しているTargetを移動させるコンポーネント

f:id:Raspberly:20220307021331p:plain

 

 

サメの巡回システム

サメやシップを巡回させるWaypoint Systemコンポーネントが用意されています。

f:id:Raspberly:20220307011840p:plain

このコンポーネントがアタッチされているオブジェクトの子オブジェクトに、空のGameObjectを作成し、
巡回させたいポイントに配置するだけでOK

f:id:Raspberly:20220307011731p:plain

 

わかりやすいようギズモが表示されるので調整も簡単

f:id:Raspberly:20220307011407g:plain

 

 

 

 

以上です。

ABZÛSubnauticaみたいなゲームを作る時に最適なアセットですね。

 

 

 

 

他のアセットの紹介記事はこちら↓

raspberly.hateblo.jp

 

 

 

※本記事にはAssetStoreアフィリエイトリンクが含まれています。

他、間違っている箇所、わかりにくい所がありましたらコメントにお願いします。

【アセット紹介】ALINEで線を引く【Unity】

今回はアセットの紹介をしていきます。
紹介するのはALINE
線を描画するアセットです。

f:id:Raspberly:20220216011203p:plain

 

 

どんなアセット?

UnityのDebug.DrawやGizmoの描画を高速で多機能な描画に置き換えるアセットです。
ゲーム画面での描画もできます。

機能のハイライト
-より多くの描画プリミティブ
-シンプルで柔軟で一貫性のあるAPI-
高性能。多くの場合、UnityのAPIを大幅に上回っています
-バースト/ ECSジョブの内部から描画し、デバッグを簡単にします。
-スタンドアロンゲームでレンダリングします。レベルエディタを作成したい場合、またはゲームでsci fiの外観を持たせたい場合に最適です
-MSAAやその他の種類の後処理がなくても完全にアンチエイリアスされた行
-さまざまな行幅をサポートし
ます-非常によく文書化されています
-構築されたものをサポートします-レンダリングパイプライン、HDRPおよびURP(執筆時点ではまだベータ段階であり、いくつかの必要な機能が欠落している2D URPを除く)

 

同パブリッシャーの出している人気経路探索アセットA* Pathfinding Project Proでも使われているようです。

 

詳しい機能は公式サイトから確認できます。
どのくらい早くなっているかも確認できます。

 

開発環境

Unity 2020.3.26f1

ALINE ver1.5.2

 

 

インポートの確認

アセットインポート完了時はこんな感じです。

f:id:Raspberly:20220217003607p:plain

 

Exampleシーンの確認

f:id:Raspberly:20220217003159p:plain

ExampleScenesに使用例があります。
ギズモを表示したり、線をつないだり。

f:id:Raspberly:20220217234810g:plain

f:id:Raspberly:20220217234946g:plain

 

 

実際に試してみる

図形を描画してみる

Scriptを書いて図形を描画してみます。

 

今回はシーンビューにワイヤーボックスを描画します。
一番簡単な書き方をすると以下のようなScriptで描画されます。

Gizmos.Draw〇〇系とはちょっと書き方が違いますがパラメータなどは一緒です。

using UnityEngine;
using Drawing;

public class AlineTest : MonoBehaviour
{
    void Update()
    {
        Draw.WireBox(Vector3.zero, Vector3.one);
    }
}

これだけでシーンビューにWireBoxが描画されます

f:id:Raspberly:20220218011945p:plain


いくつかオーバーロードが用意されています。
Scriptがアタッチされているgameobjectのtransformを渡すと、かなりGizmoっぽくなりますね。

Draw.WireBox(transform.position, transform.rotation, transform.localScale);

f:id:Raspberly:20220218013829g:plain

 

 

プリミティブな図形を描画する関数があらかじめ用意されています。
用意されているコマンドはこちらから確認できます。

f:id:Raspberly:20220221010555p:plain

 

2点間に線を引いたり

using UnityEngine;
using Drawing;

public class AlineTest : MonoBehaviour
{
    [SerializeField] Transform m_Origin;
    [SerializeField] Transform m_Target;

    void Update()
    {
        Draw.Line(m_Origin.position, m_Target.position);
    }
}

f:id:Raspberly:20220221013741g:plain

 

グリッドを手軽に表示したり

// 位置, 角度, セルの数, グリッド全体の大きさ
Draw.WireGrid(Vector3.zero, Quaternion.identity, new int2(30, 30), new float2(50, 50), Color.red);

f:id:Raspberly:20220221013640p:plain

 

 

 

ゲーム画面にも描画する

このままだとシーンビューにのみ表示されます。
ゲーム画面でも出したい場合はDraw.ingameを使用します。

 

DrawをDraw.ingameに置き換えるだけです。

// シーンビューのみ
Draw.WireBox(Vector3.zero, Vector3.one);

// ゲーム画面でも表示する
Draw.ingame.WireBox(Vector3.zero, Vector3.one);

 

 

スコープ機能を使ってまとめて描画設定をする

ALINEにはスコープという機能が用意されています。
これを使うことで複数の描画を行うときにまとめて描画設定ができます。

 

以下のScriptを実行すると赤いCubeが3つ作成されます。

Draw.WireBox(new float3(0, 0, 0), new float3(1, 1, 1), Color.red);
Draw.WireBox(new float3(2, 0, 0), new float3(2, 1, 1), Color.red);
Draw.WireBox(new float3(0, 2, 0), new float3(1, 2, 1), Color.red);

f:id:Raspberly:20220221014819p:plain

Draw.WireBoxの引数にColor.redを渡して赤くしているわけですが、
以下のような書き方をしても同じ結果になります。

using(Draw.WithColor(Color.red))
{
    Draw.WireBox(new float3(0, 0, 0), new float3(1, 1, 1));
    Draw.WireBox(new float3(2, 0, 0), new float3(2, 1, 1));
    Draw.WireBox(new float3(0, 2, 0), new float3(1, 2, 1));
}

 

スコープはネストにもできます。
色や線の太さをまとめて設定したい時に便利ですね。

using(Draw.WithColor(Color.red))
{
    using(Draw.WithLineWidth(3))
    {
        Draw.WireBox(new float3(0, 0, 0), new float3(1, 1, 1));
        Draw.WireBox(new float3(2, 0, 0), new float3(2, 1, 1));
        Draw.WireBox(new float3(0, 2, 0), new float3(1, 2, 1));
    }
}

 

 

 

 

まとめ

ALINEを使って線を引いてみました。Debug.Drawよりも高速でキレイな線を引くことができました。
デバッグ用途以外だけでなく、ゲームのデザインに組み込むこともできるのでいろいろ活用できそうです。
今回はしませんでしたが、Job System+ECSを使ったさらに高速な描画や、高度な使用法もあったりします。

 

以上です。

本当は変わった使い方も載せたいと思っていましたがいいアイデアが浮かばなかった・・・・

 

 

 

他のアセットの紹介記事はこちら↓

raspberly.hateblo.jp

 

 

 

※本記事にはAssetStoreアフィリエイトリンクが含まれています。

他、間違っている箇所、わかりにくい所がありましたらコメントにお願いします。

【アセット紹介】Prefab Brush+でオブジェクトを配置する【Unity】

今回はアセットの紹介をしていきます。
紹介するのはPrefab Brush+。
コライダーの表面にオブジェクトを配置するツールアセットです。

f:id:Raspberly:20220126223900p:plain

 

f:id:Raspberly:20220201031618p:plain

 

お得なバンドル情報

現在アセットストアではお得なバンドルセールが開催中。
今回はなんと2つ用意されています!詳しくは↓のバナー画像からどうぞ!

f:id:Raspberly:20220128012425p:plain   f:id:Raspberly:20220128012441p:plain

今回紹介する「Prefab Brush+」はRoaring Mega Bundleの対象アセットです。

 

 

 

どんなアセット?

コライダーの表面にオブジェクトを配置するツールアセットです。
Terrainのブラシと同じ使用感で簡単にオブジェクトを配置できます。

f:id:Raspberly:20220201023627g:plain

説明

Prefab Brush +は、シーンビューのコライダーサーフェスにプレハブまたはゲームオブジェクトを配置できる使いやすいツールです。葉の詳細、AI、木、岩、または配置したいプレハブをペイントするのに最適です。

 


特徴:


-ブラシ設定をスクリプト可能なオブジェクトとして保存およびロード


-カスタマイズ可能なブラシサイズ


-回転をサーフェス法線に一致させます


-オブジェクトにランダムな回転とスケールの値を定義します


-ブラシをかけるレイヤーとタグを選択します


-ブラシをかけられたオブジェクトは、さまざまな方法(単一、サーフェス、最も近い、ラウンドロビン)を使用して他のオブジェクトにペアレント化できます。


-一度に複数のプレハブをペイントできます


-スロープフィルター、ペイントする最小角度と最大角度を定義します


-シーンにプレハブやコンポーネントを追加する必要はありません

 

ドキュメント

 

 

 

開発環境

Unity 2020.3.26f1

Prefab Brush+ ver1.3.11

※サポート対象のUnityバージョンは結構高め。最低でもUnity2020.3.26以上が必要です。

 

 

インポートの確認

アセットインポート完了時はこんな感じです。

f:id:Raspberly:20220130234105p:plain

デモシーンの確認

Assets/Prefab Brush/Example Content/Scenes/PB_Exampleがデモ用に用意されているシーンです。

f:id:Raspberly:20220201005136p:plain

デモシーンというよりも、オブジェクトを配置するテストに最適なシーンといった方が正しいですね。
すぐにテストできるようPrefabもあらかじめ用意されています。

 

 

実際に試してみる

実際にPrefab Brush+を使ってオブジェクトを配置してみます。
今回はごく普通のCubeを配置します。

 

Prefab Brush+ウインドウ

ウインドウの表示

UnityのツールバーからTools/Prefab Brush+を選択

f:id:Raspberly:20220128012242p:plain

するとこんなウインドウが表示されます。

f:id:Raspberly:20220130004610p:plain

このウインドウから、ブラシと配置するオブジェクトの設定を行います。

 

Prefab Brush+のオンオフ

Prefab Brush+ウインドウを表示すると、シーンビューにこのような丸い円が表示されます。
これはブラシの効果範囲を表します。

f:id:Raspberly:20220130221855p:plain

それと同時に、シーンビューでオブジェクトを選択した時のギズモが表示されなくなります。

f:id:Raspberly:20220130221022p:plain

これはPrefab Brush+ウインドウからPrefab Brush+を無効化すると再び表示されます。

f:id:Raspberly:20220130234320g:plain

重要な点として、ウインドウを閉じてもPrefab Brush+は自動で無効化されません。
使い終わったら必ず無効化しましょう。

 

 

配置するオブジェクトの設定

配置したいオブジェクトはPrefab化しておき、Prefab Brush+のウインドウ内にD&Dします。
ウインドウ内にPrefabが表示されていれば設定は完了です。
赤い×ボタンから登録削除もできます。

f:id:Raspberly:20220131010638g:plain

 

設定後シーンビュー上でマウスをドラッグするとCubeがもりもり配置されます。

f:id:Raspberly:20220131010653g:plain

 

配置したオブジェクトの削除

Prefab Brush+ウインドウ上部からPrefab Erase Brushを選択すると、
オブジェクトを削除するブラシが使用できます。

f:id:Raspberly:20220201010003p:plain

これはPrefab Paint Brushを選択中でもCtrlキーを押せば押している間だけ切り替わります。
使い方は通常のブラシと同じです。

f:id:Raspberly:20220201031350g:plain

 

 

各種設定

Prefab Brush+ウインドウ内のパラメータなどについて大まかに解説します。

※全部は解説しません詳しくはドキュメントから

配置方法の変更

配置方法は「Surface(デフォルト)」と「Physics」と「Single」の3種類があります。

f:id:Raspberly:20220201001703p:plain

Surfaceは表面に直接ペイントする方法で、
Physicsは少し高い所から落ちたときの物理シミュレートで配置する方法です。(Grabbitほど精密にはできない)
Singleはブラシではなく1回のマウスクリックで1つ配置します。

f:id:Raspberly:20220201001718g:plain

 

ブラシの設定

f:id:Raspberly:20220201003853p:plain

Brush Sizeはブラシの大きさ。
Paint Delta Distanceは再配置されるまでの移動量。(小さいほど密度が濃くなる)
Prefabs Per Strokeは一度に配置される数。

 

これらはスライダーで簡単に調整できます。

 

子オブジェクトとして配置する

そのままだと全てルート上に配置されるためヒエラルキーが散らかって汚れます。

f:id:Raspberly:20220131012802p:plain

 

Prefab Brush+ウインドウのObjectSettings/BrushedObjectsParentSettingsから、
特定のオブジェクトの子オブジェクトとして配置するように設定できます。

f:id:Raspberly:20220131012915p:plain

Surfaceを選ぶと、地面オブジェクトの子として配置します。

 

 

実践編

せっかくなので同じバンドルに含まれている3Dモデルアセットを使ってオブジェクトを配置してみます。
体育館に椅子を乱雑に配置していきます。

f:id:Raspberly:20220201010327p:plain


ステージ

用意されているデモシーンをそのまま使います。

f:id:Raspberly:20220201011037p:plain

最初から置いてある椅子は邪魔なので消しておきます。

f:id:Raspberly:20220201010903p:plain

 

また、床にColliderがないためMeshColldierをアタッチしておきます。

f:id:Raspberly:20220201022722p:plain

 

Prefab Brush+の設定

配置するPrefabにはAssets/JP_School gymnasium_V2/Prefabs/chair01_B_1を使います。

f:id:Raspberly:20220201022625p:plain

 

椅子の角度固定

上の方で紹介していませんでしたが、Object Settingsから位置や角度に補正をかけることができます。
今回は椅子がステージを向くようにしたいのでRotationのY軸を-90にします。

f:id:Raspberly:20220201011508p:plain

 

これで設定は完了。
シーンビューからマウスを使って簡単に椅子を配置することができました。

f:id:Raspberly:20220201023627g:plain

 

 

まとめ

Prefab Brush+を使うとTerrain Brushと同じ感覚で簡単にオブジェクトを配置できる

 

公式のスクショから読み取るに、屋外の比較的大きなオブジェクトの配置を想定しているような気がします。
屋内で精密な配置をしたい時はGrabbitなど使い分けるのがよさそう。

raspberly.hateblo.jp

 

以上です。

 

 

 

他のアセットの紹介記事はこちら↓

raspberly.hateblo.jp

 

 

 

※本記事にはAssetStoreアフィリエイトリンクが含まれています。

他、間違っている箇所、わかりにくい所がありましたらコメントにお願いします。

【2021年】今年人気だった記事トップ10【ふりかえり】

2021年の振り返り記事です。
ブログ読者の皆様に支えられ、無事今年も終えることができました。
最終合計アクセス数は約220000本当にありがとうございます!

今回はこのブログで人気だった記事の振り返りをしていきます。

f:id:Raspberly:20211231202851p:plain

 

 

去年のランキングはこちら

raspberly.hateblo.jp

 

 

今年の人気記事トップ10 (2021年新規記事)

今年公開した53記事の中で人気のものをランキング形式で紹介します。
単純にページビュー数で比較しているので、今年後半に公開した記事ほど不利です
しかたないね。

 

 

全体の傾向としてはこんな感じ。

f:id:Raspberly:20211231190410p:plain

4月と11月にものすごく伸びてる日がありますがそれはこれから解説します。

 

10位 【アセット紹介】Nature Rendererできれいで高速な草を描画する【Unity】

Terrainに生やす木や草のグラフィックを向上させるツールアセットの紹介記事。

ページビュー数541

raspberly.hateblo.jp

 

 

9位 【アセット紹介】Grabbitでオブジェクトを配置する【Unity】

オブジェクトの配置を用意にするツールアセットの紹介記事。

ページビュー数596

raspberly.hateblo.jp

 

 

8位 【アセット紹介】Crest Ocean System URP で海を作る【Unity】

URP用の海を作るアセットの紹介記事。

ページビュー数674

raspberly.hateblo.jp

 

 

7位 【Unityネタ】空気中を漂うほこりのようなパーティクルエフェクトをつくる

雰囲気作りに最適なパーティクルを作成する小技紹介記事。

ページビュー682

raspberly.hateblo.jp

 

 

6位 【Unityネタ】アニメーションの再生開始位置をランダムにする

アニメーションの再生位置を変える小技紹介記事。
公開時反響はほとんどなかったのでランクインしてるのが意外な記事その1。

ページビュー1,136

raspberly.hateblo.jp

 

5位 【Unityネタ】サイズを変えても比率が変化しない「ふきだし」を作る

ふきだしを作る小技紹介記事。
9スライス自体は昔からあるUnityの機能なのでランクインしてるのが意外な記事その2。

ページビュー1,267

raspberly.hateblo.jp

 

 

4位 【アセット紹介】Feel で演出を作る【Unity】

今年イチオシのアセット「Feel」の紹介記事。
Twitterでも多くの反応をいただきました。

ページビュー1,463

raspberly.hateblo.jp

 

 

3位 【アセット紹介】Loading Screenでロード画面を簡単に実装する【Unity】

ロード画面を作るアセット紹介記事。
バンドルに含まれていたアセットで、所有者が多いのもありランクイン。

 

ページビュー1,514

raspberly.hateblo.jp

 

 

2位 【小技】Soft Particleでオブジェクトにフォグをかける【Unity】

Twitterネタを解説した小技記事。

 

ページビュー1,736

raspberly.hateblo.jp

 

 

 

1位 【Unityネタ】Project PLATEAUを使って東京の3Dモデルを表示する

4月頃大いに話題になったPLATEAUの解説記事です。
Twitterでも多くの反響をいただきました。

 

ページビュー数はぶっちぎりの6,167

raspberly.hateblo.jp

 

 

全体で見るとPLATEAUの記事がぶっちぎって多いです。
4月の瞬間的なアクセス数の増加はこれが原因。

 

11月のアクセス数増加は、セール中のアセット紹介記事をまとめた記事が人気だったのが大きいです。

raspberly.hateblo.jp

当時は独身セール、ブラックフライデーセールとセールが続いてたので、
まとめ記事+まとめられている全アセット紹介記事のアクセス数が大きく伸びました。

 

 

今年の人気記事トップ10 (全記事)

次はブログ内全記事のランキングです。
ここは1位からさらっと紹介。

 

1位 【Unityネタ】Project PLATEAUを使って東京の3Dモデルを表示する

2位【Oculus Quest開発メモ】物を掴む、物を投げる OVR Grabber & Grabbable編【Unity】

3位【Oculus Quest開発メモ】VR空間内を歩き回る OVR PlayerController編 【Unity】

4位Oculus Quest2からPCにスクショや録画ファイルを取り込む (Windows)

5位【アセット紹介】Joystick Pack でバーチャルスティックを実装する【Unity】

6位【Oculus Quest開発メモ】開発初期設定まとめ Oculus Integration【Unity】

7位【VR開発メモ】視点から遅れて追従するUIを作る【Unity】

8位勉強会レポ : スマホゲームサーバーのしくみを知ってみよう

9位SphereやCubeのColliderを逆にする

10位Oculus QuestからPCにスクショや録画ファイルを取り込む(Windows)

 

ほとんど去年と変わりありませんが、JoystickPackの記事が圏外からいきなりランクインしてきました。
PLATEAUがここでも強い。

 

 

 

 

今年の振り返り

今年あったいろいろなことを振り返ってみます。

久々のLT登壇

春に1年以上ぶりのLT登壇をしました。

raspberly.hateblo.jp

LTで紹介したのはPeekというUnityのワークフローを改善するアセットです。
登壇といっても事前に録画したものなのでそれほど緊張はしませんでしたが楽しかった。

 

記事の投稿とゲーム開発

昨年が40記事なのに対し今年は53記事投稿しました、そのうちアセット紹介記事が28となっています。
たくさん記事は書けましたが、ゲーム開発がほぼ皆無となってしまいました。
一応マスコットアプリ文化祭(とUnity1Week)用にギリギリ一本投稿はできたので一応ヨシ!

unityroom.com

ゲーム開発は本当に久しぶりですがやっぱり楽しいですね。

 

初めての動画制作

Unity1Weekのリール動画で初めて動画制作をしました。

youtu.be

Unite Tokyoで流れてるMade with Unityの動画が好きなのでよく見るのですが、
これのUnity1Week版が見たいなぁと思ったのがきっかけです。

youtu.be

使った動画編集ソフトはPower Director365で、プレイ動画の撮影にはBandicamを使用しています。
3週間程度で作れましたが、実は動画冒頭のモーショングラフィック部分だけで2週間かかってます・・・
PowerDirectorは1年プランで契約したので次のUnity1Weekなどでも使っていきたいところ。

 

Unityゲーム開発者ギルド

ギルド自体は前から参加していましたが、Slackの使い方がよくわからなかったためブログ記事を投稿した時の告知としてでしか使っていませんでした。
12月に参加したもくもく会で使い方を教えてもらったので、これからはいろいろ使っていこうと思います。
正直Twitterとの使い分けはよくわかりませんが、気軽に使えるのがいいですね。

 

 

今年の反省点

去年の抱負でVR関係の記事を強化するといっておきながらそこまで手をつけられていないのが大きな反省点
今年こそは・・・うん

 

 

 

 

だいたいこんな感じ。

 

最後に 、いつも当ブログをご覧いただきありがとうございます。

来年もよろしくお願いいたします。
よいお年を!

【Unityネタ】オープンワールドでよく見るインジケーターを作ってみる

この記事はUnity Advent Calendar 2021 13日目の記事です。

qiita.com

昨日は@xrdnkさんによる「Unidux でマルチシーン画面遷移制御を行う」でした。

明日は@tsubaki_t1さんによる「Unity 2021.2のSceneViewで色々な操作を行う新機能、Overlayについて」です。

 

 

今回はオープンワールドゲームでよく見るインジケーターをUnityで実装してみます。

f:id:Raspberly:20211213010215g:plain

f:id:Raspberly:20211213012611p:plain

 

 

 

インジケーターとは

インジケーターは以下のGIFで表示されている白いバーのことです。
これはMETAL GEAR SOLID Vのプレイ映像ですが、敵に怪しまれると白いバーが画面に表示されます
このバーはこちらを怪しんでいる敵の方向を知らせてくれる役割を持ちます。

f:id:Raspberly:20211212210452g:plain

これをUnityで作ってみます。

 

恐らくゲームによって呼び方は違いますが、METAL GEAR SOLID Vではインジケーターと呼称されているため、
本記事でもインジケーターで表記します。

mgstpp-app.konamionline.com

 

 

 

開発環境

Unity 2020.3.22f1

デモのキャラクターモデルはユニティちゃん*1を使用しています

raspberly.hateblo.jp

 

 

 

実際に作ってみる

UIの作成

まずはインジケーターのUIを作っていきます。

Canvasを作成し、Canvasの子に空のGameObjectを作成します。名前はIndicatorBaseにしておきます。

f:id:Raspberly:20211212222927p:plain

IndicatorBaseのAnchorはMiddleCenterに設定します。(最初からそうなってるはず)

f:id:Raspberly:20211212222854p:plain

 

次に、IndicatorBaseの子にImageを作成。

f:id:Raspberly:20211212224602p:plain

インジケーターとして表示するSpriteを適当に用意しImageに設定しておきます。
AnchorはMiddleCenterに設定します。

f:id:Raspberly:20211212230331p:plain

PosYなどを設定し上を向くように配置します。

f:id:Raspberly:20211212225246p:plain

 

プレイヤーとエネミーの作成

適当にCapsuleとCubeを作成します。
Capsuleをプレイヤーに、Cubeをエネミーとして扱います。

f:id:Raspberly:20211212231505p:plain

それぞれ名前も変えておきます。

 

 

コンポーネントの作成

以下のScriptをコピーし、IndicatorBaseコンポーネントを作成します。

using UnityEngine;

public class IndicatorBase : MonoBehaviour
{
    [SerializeField] Transform Player;
    [SerializeField] Transform Camera;
    [SerializeField] Transform Enemy;
    [SerializeField] RectTransform Indicator;

    void Update()
    {
        var rot = Quaternion.LookRotation(Enemy.position - Player.position);
        var angle = (Camera.eulerAngles - rot.eulerAngles).y;
        Indicator.localEulerAngles = new Vector3(0, 0, angle);
    }
}

 

 

コンポーネントのアタッチ

プレイヤーにIndicatorBaseコンポーネントをアタッチします。(プレイヤーじゃなくてもいいが)

 

コンポーネントは以下のように設定します。

f:id:Raspberly:20211213043452p:plain

IndicatorにはIndicatorBaseを紐づけます。
インジケーター自体ではなく、その親を回転させるためです。

 

実際に動かすと、エネミーの動きに合わせてインジケーターが回転するのがわかります。

f:id:Raspberly:20211213002603g:plain

 

 

 

ユニティちゃんを使ったシーンで試してみました。
インジケーターのデザインを変えたり、敵に見つかったときだけ表示したり、
複数表示に対応したりと色々楽しめそうですね!

f:id:Raspberly:20211213010215g:plain

敵キャラにはこちらのアセットを使っています。

raspberly.hateblo.jp

 

 

 

まとめ

オープンワールドゲームでよく見るインジケーターをUnityで作ってみました
ただ、スクリプトについてはまだまだ改善に余地がありそう。

 

一人称ゲームでもそのまま動作しますが、トップダウンなどカメラの挙動が異なるゲームで使用する場合スクリプトの修正が必要にかも。

 

以上です。

 

 

 

 

旧バージョン

途中でスクリプトを変えました。古いのはこっち

using UnityEngine;

public class IndicatorBase : MonoBehaviour
{
    [SerializeField] Transform Player;
    [SerializeField] Transform Enemy;
    [SerializeField] RectTransform Indicator;

    void Update()
    {
        var rot = Quaternion.LookRotation(Enemy.position - Player.position);
        var angle = (Player.eulerAngles - rot.eulerAngles).y;
        Indicator.localEulerAngles = new Vector3(0, 0, angle);
    }
}

PlayerにはMainCameraを紐づけます
TPS*2のようにプレイヤーキャラクターとカメラが別方向を向くゲームで、プレイヤーを基準にするとプレイヤーがクルクル回転するたびインジケーターも荒ぶります。そのため敵の角度はカメラを基準にしています。
ただこれだと、敵とプレイヤーが密着した時に正しい角度がとれないため今のバージョンに修正しました。

 

 

参考資料

スクリプト内の計算についてはこちらから

fanblogs.jp

t-stove-k.hatenablog.com

 

www.create-forever.games

 

Quaternion.LookRotationは調べて初めて知りました。
こんな便利なものがあったんですね。

 

 

 

 

過去のアドベントカレンダー記事

raspberly.hateblo.jp

 

raspberly.hateblo.jp

 

raspberly.hateblo.jp

 

 

 

他、間違っている箇所、わかりにくい所がありましたらコメントにお願いします。

*1:© Unity Technologies Japan/UCL

*2:三人称視点シューティングゲーム

【勉強会レポ】: Unity お・と・なのLT大会 2021

勉強会のレポート(メモ)です。
参加したのはこちら「【年末だよ】Unity お・と・なのLT大会 2021」
会場はZoom meetingです。

f:id:Raspberly:20211213025808p:plain

meetup.unity3d.jp

ハッシュタグ : #Unity_LT

 

 

長丁場のイベントなので簡単な概要とスライドだけ。 
※一部内容はUnity Learning Materialsで公開されるようです。
 

learning.unity3d.jp

 

アドカレの記事を書きながら聞いていたので今回はメモとかはないです。

 

 

 

LT#1 むろほし : UnityEditorの小さな機能改善紹介

こちらの記事からのピックアップ。

forpro.unity3d.jp

 

こっちも参考になります

youtu.be

 

 

LT#2 もーり : UnityとMagic Leapでドローンを飛ばす話

 

 

LT#3 とりすーぷ : Unityの本を出した話

みんな紙の本を買おうね!

 

 

LT#4 Denik : Unidux を用いたマルチシーン構成の画面遷移

 

 

LT#5 長谷川 : Automated QAパッケージの紹介

 

 

 

LT#6 オオバ : UI開発をラクにするPhotoshopから効率的に画像を書き出す方法

 

 

LT#7 sada : コンパイルエラー検知くんその2

 

 

 

LT#8 ichijo : Google Sheets経由でUnity Localization Packageのデータを更新する
ADXの多言語ボイス音声切り替え機能連携

自作ローカライズ機能からUnity公式ローカライズパッケージに乗り換えて、Google Sheetと連携した時の話、
+ADXとUnity Localization Packageの連動

 

導入についてはこちら

learning.unity3d.jp

 

 

LT#9 enpelUnity : 今年買ったAssetと向き合うLT

今年開催されたアセットストアのセールまとめと、罪アセットと向き合うLT

やめてくれよ・・・(絶望)

 

2020年のまとめはこちら

note.com

 

 

 

LT#10 ナナキ : 笑ってはいけないUnity開発24時 ~デザイナーが遭遇するUnityに関するバグの話~

Unityでよくあるバグに関するお話。

metaファイルの上げ忘れによるマテリアルMissingなど。

 

 

LT#11 かまた : アプリの通信をハックする話

アプリの通信を覗いたり、データの上書きに関するお話。

 

 

 

LT#12 いも : Unityテスト活動のふりかえり

 

 

 

LT#13 tamtam : 10分でざっくり理解するバーチャルプロダクション

飛び入り参加枠。
バーチャルプロダクション(映像手法)に関するお話。
細かい内容についてはSIGGRAPH Asiaにて。

sa2021.siggraph.org

 

 

cgworld.jp

 

note.com

 

 

LT#14 Azuki : 運用プロダクトにおけるAirTest運用の事例紹介

 

 

LT#15 Cova : Unity AssetImporter を公開しました

 

 

LT#16 つかさん : Unityにおける継続的メカニクスと離散的メカニクス

ゲームメカニクスに関するお話。
離散&継続的メカニクスという考え方について。

 

 

 

 

 

 

過去のレポはこちら

raspberly.hateblo.jp

 

raspberly.hateblo.jp

 

raspberly.hateblo.jp

 

 

間違っている箇所、消してほしいツイートがありましたらコメントにお願いします。

【イベントレポ】↑↑↓↓←→←→BA35周年記念 KONAMIアクション&シューティングゲームコンテスト・ミニキャンプ

イベントのレポート(メモ)です。
参加したのはこちら、
「↑↑↓↓←→←→BA35周年記念 KONAMIアクション&シューティングゲームコンテスト・ミニキャンプ」

 

会場は銀座Unityもくもく会でもおなじみesports銀座schoolさんです。

note.com

f:id:Raspberly:20211213014148p:plain

ハッシュタグ : #ASGコンテスト

 

イベント概要

KONAMI アクション&シューティングゲームコンテストに関連したリアルイベントで、
ゲームコンテストの対象になっているレトロゲームを実際に遊ぶことができます。

www.konami.com

さらに、Unityセミナーとトークセッションもあります。

 

 

コンテスト対象タイトルプレイ会

ファミリーコンピュータディスクシステムスーパーファミコンMSXの4ハードの中から、
40タイトルを遊ぶことができます。

 

私はスーパーファミコン以外のハードはさわったことがないのでなかなか新鮮でした。
ディスクシステムの入れ替え機能とかなかなかユニーク。

 

f:id:Raspberly:20211213015305j:plain

がんばれゴエモングラディウスなど名前を聞いたことはあるけど、
やったことがないゲームがたくさんあったので実際に遊ぶいい機会!

f:id:Raspberly:20211213015320j:plain

周りにスタッフの方がたくさんいるので、一緒に盛り上がったりしました。
ただ見られながらプレイすることになるのでなかなか緊張する。

 

さすがに全て遊ぶことはできませんでしたが、ファミコンの「クォース」というタイトルが一番面白かったです。
もくもくとずっと遊べるタイプのゲーム。

 

 

ゲーム開発者向けUnityセミナー

Unityの安原さんと、常名さんによるセミナーです。

 

安原さんのセミナーは、シューティングゲームの制作テクニックに関する内容です。

オプションの実装方法から始まり、
シューティングゲームの弾は楕円にするべき
・爆発は発生角度をランダムにするべき(爆発パターンが多いように感じる)
・ただし回転させながら爆発させてはいけない
・爆発の煙はなくていい(かっこいいけど負荷が高い)
・攻撃が当たったときに敵を光らせるのはよく考えること(リアルな外観のゲームだと違和感を感じるため)
などいろいろなテクニックが紹介されました。
スペースハリアーについても熱く語っていただきました。

 

 

後半の常名さんによるセミナーはアセットの紹介です。
こちらは後日資料が公開されるようです。

Dynamic BoneやFinal IKなどの定番からUI素材のパック、エフェクトパック、開発効率アップ系などアクションゲーム・シューティングゲーム制作にピッタリの厳選されたアセットが30個紹介されました。

 

 

ゲーム開発トークセッション

特別ゲストによるトークセッションが行われました。

高橋名人/ゲームプレゼンター
・谷渕弘/株式会社コナミデジタルエンタテインメント エグゼクティブディレクター

開発中の裏話や企画の考え方が紹介されました。

こちらは後日、KONAMI公式YouTubeチャンネルで公開されるようです。

 

 

 

 

 

以上です。