2010-01-18 22:30:48 | Querbok
UnityのTerrain機能は便利で強力だがHeightMapなので、横穴を開けることができない。
Unity Wikiにも穴が開いているように見えるマスク処理が紹介されているが、穴の向こうに表示したいものは専用のshaderを使用しないといけないという制限があるので、シンプルなものにしか使えない。特にTPSで装備などで自キャラの構成も複雑だと簡単に切り替えるというわけにもいかない。そんなわけで、できるだけshaderの制約を受けない方式で作ってみた。


Terrainのメッシュ自体をいじって穴を開けることはできないので、穴を開けたい場所にメッシュを置いて、その部分だけTerrainを除いてレンダーしたものを貼りつけちゃおうというもの。
穴の通過を考えると、Terrainとの間に隙間があるとノイズとなるので、できるだけ密着するメッシュが必要になる。そこでまずTerrainデータから自動でメッシュを吸い出す機能から。

指定Terrainとこのスクリプトが入ったオブジェクトに隣接する箇所を起点に、Terrainメッシュの一部を複製する処理。
TerrainPoly.js


次にメッシュにカメラマトリクスで投影描画する処理。
LayerFilteringController.js (update 2010/11/06)


透過部分のレンダー時に、Terrainをレイヤー的にレンダー対象から省くことで透明化するので、
あらかじめ対象のTerrainを専用のレイヤーに(「terrain」Layerなどを作って)設定しておく必要がある。それをLayerFilteringController > renderingLayers設定から選択を外す。このメッシュ自体もIgnore Raycastなどに設定しておき、レンダー対象から外しておく。あとは対象のTerrainをTerrainPolyに設定。


穴を覆うようにメッシュを配置


あくまで向こう側が描画されているだけでTerrainのColliderは有効なままなので、このままだと通過はできない。以下の様に貫通する形でColliderを設置してやり、OnTriggerEnter時にPhysics.IgnoreCollisionを使って対象とTerrainの当たり判定を一時的に無効化し、OnTriggerExitで戻してやれば、通過が可能になる。(TPSでカメラの遮蔽物よけ処理がある場合はそれらのチェックも一時的に無効化が必要。)通過時はTerrainは床として使えないので代わりとなる床が必要。


 

About   

SmokymonkeySとは、2名からなるインディチームです。 ゲームやその他作品を無所属で個人開発しています。
2002年 WebゲームTRIGLAVを公開。総勢50万アカウントを超える長寿ゲーム。
2015年 3DアクションRPG Ninelivesを開発。現在休止中。
2018年 TRIGLAV モバイル版をリリース。70万ダウンロード達成。
2021年 作場知生氏と共同開発したガラージュ 完全版をリリース。

SmokymonkeyS is a two-man indie team by a programmer and a graphic designer, formed for creating games.
Our 1st game TRIGLAV, a web RPG that has been made with JavaScript has passed over half a million accounts since launched 2002.
2015, Ninelives suspended the development after the alpha phase.
2018, released Triglav for Mobile. Reached 700 thousand download.
2021, released Garage: Bad Dream Adventure. Developed with Sakuba Tomomi.

 

Any Comment?

1574 Posts | Page 1/263
Alex
Please release Ninelives!
チペタン
ナインライブスの再開、何十年でも待ちまする。日本製のゲームだし、この独特の世界感が今も大好き!
jos
come back to work at ninelives
SmokymonkeyS
Send an email to me. The address is top-right of this website.
Yuli
Excellent triglav game, but o haven't received a purchase of beetles, what can i do?
Ricado Smith
Maybe you can do a fundraising for continue development of Ninelives