なぜ実装したか
UnityAssetStoreなどにもGitHubなどにも調べるといくつかありますが(普通の実装)、今回私がやりたいことの実現が難しいものだったため実装(私の実装)を行いました。
普通の実装
一般的に公開されているものは以下のように設計で行わていることが多いです。
下記は、GameObjectがF,A,B,C,D,E,F,Aと8つあります。赤文字のものは2つ同じアルファベットのGameObjectがあることを表しています。つまり、別のGameObjectです。
↓
少しスクロールするとこんな感じ。
このように画面外の見えていない部分に次のアルファベットがくるように書き換えて実装しているものが多いです。
基本的にこれで問題ないのですが、1つのGameObjectの構成が複雑な場合問題が発生します。
例えば書き換えコストが問題だったり、エフェクトなどの見え方の同期が複雑になりがちです。
私の実装
実装したものの都合上、横に置き換えています。
↓
少しスクロールするとこんな感じ。
0(ゼロ)が画面半分にかかって、右半分が画面左、左半分が画面右に表示されているような感じです。
よくファミコンであった、スーパーマリオブラ〇ーズ、コンボイの謎、アイスクライマー、パルテナの鏡など、ファミコン時代によくキャラクターがこのような表示になりましたね。
違うところはは、赤文字の同じ数字の表示は、同じGameObjectです。
GameObjectも0,1,2,3,4と5個しかありません。
同じものを表示しているので、書き換えたりしないし、エフェクトも見え方も同期をとる必要がないということです。
仕組みは単純でカメラを2つ用意して、表示を合わせて描画するだけです。
↓ 表示を合わせる
実装プロジェクトです。
https://github.com/o-kuhiiro/MyScrollView
一応、uGUIのCanvasを使っていますが、考え方的には別の実装にも使えるかなと感じています。
3D的な扱いでないと2つのカメラで描画できないのでWorld Spaceを使っています。