読者です 読者をやめる 読者になる 読者になる

エディトリアルデザイナーのアプリ制作日記

Unityで遊ぶ個人開発者のメモ書き

縦書きノベル制作日記 表示系の覚書

 のんびり進行のゲーム制作ですが、本業やら風邪やらでさらに歩みが止まってしまい、いろいろ忘れそうになってきました…。ということで、ゲームのメインはあまり進んでないため、canvasやらScroll Rectコンポーネントを使った時の設定やら座標やらについての覚書ということで整理してみます。

 まず、canvasですが、3Dモデルとの共存などを考慮して、カメラを使ってスクリーン空間上に描画するScreen Space - Cameraモードを選択しています。キャンバス全体の拡大・縮小をどうするかのCanvasScalerの設定は、設定した画面サイズを基準にしたScale With Screen Sizeに設定しました。

f:id:hamazakifactory:20151106095715j:plain

 次にのぞき窓用に用意したパネルのScrollWindowオブジェクトは、width・heighともに画面いっぱいストレッチするようにアンカーを設定。天地に多少隙間を開けているのは、そこの隙間に操作ボタンなどを入れる予定だったかな…まぁ、あとあと調整する話なのでスルー。Scroll Rect・Maskなどの各種コンポーネントを追加。

f:id:hamazakifactory:20151106100028j:plain

 最後に実際にテキストを表示していくパネルは、右端固定・天地方向へ拡大のアンカーを設定。これで、のぞき窓の役割を持つ親のScrollWindowオブジェクトの大きさを変更しても追随するようになります。

f:id:hamazakifactory:20151106100710j:plain

 ここで、TextWindowScrollを動かすと、動かした分の座標が変化します(ScrollWindowに対するTextWindowScrolオブジェクトの位置ですね)。

f:id:hamazakifactory:20151106110140j:plain

 このTextWindowScrollパネル内に表示したいテキストを置いていくのですが、このパネルの座標系は、中心が原点になっています。縦書きでは右上から表示させたいので、開始座標は(TextWindowScrollの幅/2、TextWindowScrollの高さ/2)になります。

 また、表示量削減のためTextScrollWindow内にあるオブジェクトが、のぞき窓のScrollWindowの範囲内に入ったらテキストを表示、範囲外に出たらテキストを消去するようにしています。つまり、TextScrollWindow内にあるオブジェクトの位置が、ScrollWndowのどこにいるかを判定する必要があります。

 これは、以下のような式で求められ、

 (オブジェクトのx座標 - TextWindowScrollの幅 / 2) - TextWindowScrollのx座標

この値が、0以上かつScrollWindowの幅以下であれば、オブジェクトはのぞき窓の中と判断できます。

 って、ここまでやってきてなんだけど、自動レイアウト機能を使えば、もっと素直でスマートにできるのかなぁ、余裕ができたら調べてみよう。日々是勉強だ。うん。