Textで文字を1文字ずつ表示

1文字(指定文字数)ずつ指定時間の間隔で表示させるText。
Textでもいいけど、TMP_Textで。
禁則処理や配置でガタガタしないようにしてる。
(alpha=1にして見えづらくしてるだけ…)
UniRx使用。
Continue…

CanvasのWorldSpaceのタップの位置

WorldSpaceに設定されたCanvasを作るとき、それをメインカメラとは別の専用のカメラで映す際にボタンが反応せずハマった。
このCanvasの他に、WorldSpace以外の設定でのCanvasがあると、タップの位置がずれてしまった。そちらのCanvasと位置を合わせたらうまく動いた。
そもそもどのカメラの基準でタップされた位置が判定されるとかの設定があるのかな…?

Canvasコンポーネント内にあるEventCameraってのがタッチしたスクリーン座標をどのカメラの座標系で計算するかという指定なので、ここにUIを映しているカメラを設定すればいいだけだった。。。
ちなみにスクリプト上で行うのは Canvas.worldCamera を使って設定可能。

VRモードでのカメラの切り替え

VRモードでのカメラの切り替えは、SetParentとかで親オブジェクトを変えるより、以前のカメラを破棄(or disable)にして、あらたなオブジェクトにCameraをAddComponent()した方が扱いやすい気がする。

VRコンテンツでのUI表示

VRにてUIを表示する際に、Cameraの設定はOrthographicでいいかなと思いましたが、どうやらVRコンテンツでは(google VRでは?)カメラの設定をOrthographicではなく、Perspectiveに設定するしかないようです。
Post Processingを使っている場合はその影響が出ないように、UI専用のCameraを作成しそちらをPerspectiveにし、そちらにCanvasのRenderModeをWorldSpaceに設定し、そのカメラの子オブジェクトにしました。
PerspectiveなCameraへUIをスケールを使ってフィットさせる方法は
Continue…

Xcodeのパスのrecursiveの設定

PBXProjectなんかを使って、Xcodeの設定を書き換える際、パスのrecursiveを設定するには、パスの値に**とつければいい。
“$(PROJECT_DIR)/Frameworks/Plugins/iOS/**”
こんな感じ。

VRモードとノーマルモードの切り替え

UnityでのVR対応を作るのは非常に簡単で、PlayerSettingsのOther SettingsからVirtual Reality SupportedをONにして、SDKにCardboardなどを入れればもうVRコンテンツになる。
Unity2017.2b3からはVRではなく、XRと名称が代わり、スクリプトのパッケージ名や、PlayerSettingsの項目も、XR Settingsへと移行。
現状の最新Google VR Unity SDK v1.7ですが、Unityに入っているものはv1.6。
VRと通常コンテンツの切り替えは、基本的には。
[unitycsharp]
VRSettings.enabled = !VRSettings.enabled;
[/unitycsharp]
(2017.2b3からはXRSettings)

とすればOK。
ただ、これで成り立つのは

・起動直後からVRコンテンツ
・ノーマルコンテンツもVR同様の横向き

という条件になると思います。
Continue…

CinemachineとPost Processing Stack

ムービーシーンを作るなら
・Timeline (Unity2017にて組み込み)
Cinemachine (Asset Storeにて先月から[2017.06]から提供)
Post Processing Stack (Asset Storeにて提供)
を使いたいですが(全てUnity社提供)、いまいちPost ProcessingをTimelineで変更する方法が分からなかった。

と思ったら、Cinemachine側で、Post Processingの方ので用意してくれていた。
cinemachine_post_processing

Cinemachine Brainの方にCinemachine Post FXコンポーネントを追加し。
あとは、Cinemachine Virtual Cameraにも追加し、そのカメラに切り替わる際に使いたいPost Processingを設定すればOK!
CinemachineBrainにもこのコンポーネントをつけないとなぜか動かない。

ちなみに、Post Processingの値はフェードしてくれないような気がします。

MecanimにてTriggerがtrueになる

MecanimにてTriggerを2回連続して叩く場合に、アニメーションステートに行くことが許可されていない(Can Translation To Self)と、そのトリガーが再びONになってしまう。
なので、いったんAnimatorのステートをみてトリガーを押すかどうかを判断すればOK。

[unitycsharp]
if (!this.animator.GetCurrentAnimatorStateInfo(0).IsName("StateName"))
this.animator.SetTrigger("StateName");
[/unitycsharp]

参考)