(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]


本ブログの運営者kan.kikuchiが個人で開発した新作VRゲームです!


簡単にゲームの見栄えを綺麗にする Beautify 2【Unity】【アセット】【ポストプロセス】

この記事でのバージョン
Unity 2019.4.17f1


はじめに

今回は簡単にゲームの見栄えを綺麗にするBeautify 2というアセットの紹介です!

Beautify 2 | Fullscreen & Camera Effects | Unity Asset Store


イメージとしては以下のような感じ。

f:id:kan_kikuchi:20210327111717g:plain


ちなみにVRでも使えますし、

f:id:kan_kikuchi:20210327092759p:plain
f:id:kan_kikuchi:20210327092811p:plain


2Dでも使えるようです。

f:id:kan_kikuchi:20210325151146j:plain


なお、記事中では以下のアセットを使っています。

Village Environment Pack | 3D Historic | Unity Asset Store



Beautify 2

続きを読む

ReactivePropertyのSubscribe時に最初の通知を無視する方法【Unity】【UniRx】

この記事でのバージョン
Unity 2019.4.17f1
UniRx - Reactive Extensions for Unity 7.1.0


はじめに

UniRxのReactivePropertyを使うと簡単に変数の変更を検知する事が出来ます。

/*SampleA*/
//変更を監視する値
private ReactiveProperty<int> _valueReactiveProperty = new ReactiveProperty<int>(0);

//ReactivePropertyのうち、IObservableだけを公開し、処理を登録できるように
public IObservable<int> Observable => _valueReactiveProperty;
 
private void Start(){
  //てきとうに値を変更
  SetValue(1);
  SetValue(1); 
  SetValue(2); 
  SetValue(2); 
  SetValue(1); 
}

//値を設定する
private void SetValue(int value){
  _valueReactiveProperty.Value = value;
}
/*SampleB*/
[SerializeField]
private SampleA _sampleA = null;
    
private void Awake(){
  //値が変更されたらログを出すように
  _sampleA.Observable.Subscribe(count => Debug.Log(count));
}
f:id:kan_kikuchi:20190316142911j:plain


しかし、その変数の変更時の処理を登録(購読?)するSubscribe時にも処理が実行されてしまいます。

/*SampleA*/
//変更を監視する値
private ReactiveProperty<int> _valueReactiveProperty = new ReactiveProperty<int>(0);
/*SampleB*/
//値が変更されたらログを出すように(ここでもすぐにログが表示される)
_sampleA.Observable.Subscribe(count => Debug.Log(count));
f:id:kan_kikuchi:20210322063823j:plain


という事で今回は、ReactivePropertyのSubscribe時に最初の通知を無視する方法の紹介です!


そもそも「UniRxやReactivePropertyがよく分からん」という方は以下の記事を参照の事。





ReactivePropertyのSubscribe時に最初の通知を無視する方法

続きを読む

Oculus Link中にスタートボタンを押した事を検知(取得)する方法【Unity】【VR】【Oculus Quest】【Oculus Link】

この記事でのバージョン
Unity 2019.4.17f1
Steam VR Plugin 2.6.1 (sdk 1.13.10)
Oculus Integration 20.1


はじめに

PCに繋がなくても単独で使えるスタンドアローンなOculus Quest(及びQuest2)ですが、

Oculus Linkという機能を使えばPCに繋いでSteamのVRゲームを遊ぶ事も可能です。



遊ぶ側的にはセンサーもいらないので便利なのですが、開発側としては少し問題があります。


それはスタートボタン(左手コントローラー下部のボタン)を押すと、

f:id:kan_kikuchi:20210321152151j:plain


Steamのメニューが開くので、ゲーム側では使えなくなっている事です。

f:id:kan_kikuchi:20210321151409g:plain


さらにSteam VR Pluginを使ってもOculus Integrationを使っても、

スタートボタンを押した入力を取得する事が出来ません。

(Oculus Linkでなければ取得可能)




という事で今回は、Oculus Link中にスタートボタンを押した事を検知(取得)する方法のご紹介です!

(※たまたま見つけた明らかに正攻法ではない方法です)


ちなみに右手コントローラー下部のボタンを押すとOculus Linkのメニュー(?)が開くのですが、

f:id:kan_kikuchi:20210321151440g:plain


Oculus的に右のボタンは元からゲーム側では使えない想定のボタンだったりします。

f:id:kan_kikuchi:20210321152032j:plain




Time.timeScale

続きを読む

UniRx(ReactiveProperty)とOdin(ShowInInspector)を使ったテストプレイやデバッグで重宝する変数【Unity】【UniRx】【Odin】

この記事でのバージョン
Unity 2019.4.17f1
Odin - Inspector and Serializer 3.0.4
UniRx - Reactive Extensions for Unity 7.1.0


はじめに

今回はUnity用のRxライブラリUniRxと、



Inspectorを圧倒的に使いやすくするOdinを使って



テストプレイやデバッグで重宝する以下のような変数の紹介です!

  • 値の変更を検知出来る
  • プレイ中にInspector上で値を変更可能
  • プログラム的にはprivateで、外部から変更出来ない(取得は可能)
f:id:kan_kikuchi:20210314071544g:plain



ReactiveProperty&ShowInInspector

続きを読む

Assembly Definition Filesを使ってるのにコンパイル時間が早くならない場合の対処法【Unity】【Assembly Definition Files】

この記事でのバージョン
Unity 2019.4.17f1


はじめに

Unityでコンパイル時間を短縮したい場合、Assembly Definition Filesが便利ですが、

ざっくりまとめると、

好きなようにコンパイルする範囲を設定でき、それがコンパイル時間短縮に繋がるという事です。


ちょっと使い方を間違えるだけで、全く効果を発揮しない場合があります。

今回はそんなAssembly Definition Filesを使ってるのにコンパイル時間が早くならない場合の対処法です!


Auto Referenced

続きを読む

SkinnedMeshRendererのポーズを固定したままMeshRendererに変換するSkinnedMeshBaker【Unity】【アセット】

この記事でのバージョン
Unity 2019.4.17f1


はじめに

Unityで3Dモデルを表示しようと思った時に基本的には

アニメーションをする場合はSkinnedMeshRendererしない場合はMeshRendererを使います。

f:id:kan_kikuchi:20210309150346j:plain f:id:kan_kikuchi:20210309150355j:plain


これらのRendererはMeshとMaterialが共通で使えますし、

f:id:kan_kikuchi:20210309150854j:plain


SkinnedMeshRendererはMeshRendererに比べて結構重いので、アニメーション出来るモデルでも、

アニメーションの必要がない場合はMeshRendererを使うという事がよくあります。


しかし、当然MeshRendererはアニメーションが出来ないので、

「好きなポーズで固定したままMeshRendererで表示する」みたいな事は出来ません。


と言う事で今回は、SkinnedMeshRendererのポーズを固定したままMeshRendererに変換する方法です!

f:id:kan_kikuchi:20210310070010j:plain


なお、記事中では以下のアセットを使っています。

Animals - Simon the Raccoon | Characters | Unity Asset Store



SkinnedMeshBaker

続きを読む

RiderのFile Templatesや「Add to New… menu」が表示されず、「Edit QuickList…」ボタンも反応しなくなった場合の解決方法【エディタ】【JetBrains Rider】【トラブルシューティング】

この記事でのバージョン
JetBrains Rider 2020.3.2


はじめに

Unityでも使えるエディタであるRiderにはFile Templatesという

ファイルのテンプレートを作る機能があります。

f:id:kan_kikuchi:20210209081136g:plain


今回はこのファイルのテンプレートが何も表示されず

f:id:kan_kikuchi:20210304070617j:plain


設定の「Add to "New…" menu」のチェックボックスもなくなり

Edit QuickList…(右上の雷マーク)のボタンも反応しなくなった場合の解決方法です。

f:id:kan_kikuchi:20210304070627j:plain



原因と解決方法

続きを読む

Oculus QuestとQuest2のどちらのデバイスで実行しているかの判別方法【Unity】【Unity】

この記事でのバージョン
Unity 2019.4.17f1


はじめに

今回はUnityでOculus QuestやQuest2向けのVRゲームを開発している際に

どちらのデバイスで実行しているかを判別する方法の紹介です!


SystemInfo.deviceName

続きを読む

「Could not extract GUID……」や「Broken text PPtr. GUID……」とエラーが出る場合の対処法【Unity】【トラブルシューティング】

この記事でのバージョン
Unity 2019.4.14f1


はじめに


今回はタイトル通り、シーンを開いた時等に「Could not extract GUID……」

「Broken text PPtr. GUID……」とエラーが出る場合の対処法です!

f:id:kan_kikuchi:20210221084518j:plain



原因と対処法

続きを読む

Riderの設定の同期による共有【エディタ】【JetBrains Rider】

この記事でのバージョン
JetBrains Rider 2020.3.2


はじめに

今回はRiderの便利機能の一つ、設定の同期による共有の紹介です!



この機能は名前の通りRiderの設定を違うPCと同期(同じに)するという物で、

MacやWindowsといった異なるOS間で同期する事も可能です!

f:id:kan_kikuchi:20210220081315j:plain


ちなみにRiderとはUnityでも使える便利なエディタの事で、

導入方法については以下の記事を参照の事。





設定の同期による共有

続きを読む