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は床として使えないので代わりとなる床が必要。
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年 3DRPG Ninelivesを開発。現在休止中ですがまだプレイはできます。
2018年 TRIGLAV モバイル版をリリース。100万ダウンロード達成。
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 made by JavaScript has obtained over half a million accounts since launched 2002.
2015, Ninelives suspended after the alpha phase, but still can play.
2018, releasing Triglav for Mobile. Reached 1 million download.
2021, releasing Garage: Bad Dream Adventure. Developed with Sakuba Tomomi.
Any Comment?
1653 Posts | Page 1/207
Eeve
Ninelives was the best thing that happened to my life in recent times. It has such a unique visuals and atmosphere that I cant find anywhere else. It envokes in me my childhood memories and my own long forgotten visions. I'm so glad to exist at the same time as this game
Darling
I loved Garage. Really hoping to see future updates for Ninelives one day <3
firm300
Just want to say you guys always made games with evocative and mesmerizing worlds. Please, keep creating stuff and do your best! :)
Lana
Thank you for sharing the video on Project #Modoki, even if the game is unreleased it is a privelege to see your amazing artwork. I hope you are able to reuse the assets if/when you get to return to that world as you hope to :)
Marius
So I have been playing Triglav for a while. I LOVE IT. I am looking forward to play Garage and Ninelives too. Triglav graphics are so pretty and as future gamedeveloper it motivates me so much. I hope they get more recognization. I love them so much and cant wait for them to get more popular.
Tryndychiha
All of your games are so gorgeous and the atmosphere is scary beautiful! (in a good way) :)

このたびはご迷惑をおかけしました。triglav@smokymonkeys.com までそちらの購入履歴を添えてメールください。
googleplay支払い済 GAMEもう一度支払え
googleplayでpaypay支払いで購入したRIP代を支払ったのに、反映されません。反映されないばかりか、もう一度お試しくださいと出ます。googleplayからは明細まで来ています。また買えという事ですか?