陰影表示の際のOnBecameVisibleとOnBecameInvisibleについて
現在開発中のアプリで、OnBecameVisible(), OnBecameInvisible()にて、オブジェクトがカメラに映り込んでいるかどうかを判定し・・、という処理を作っていたのですが、どうにも思い通りに動かない。
明らかにカメラからオブジェクトが外れているにもかかわらず、OnBecameInvisible()が呼ばれなかったり、逆にカメラ内にオブジェクトが映っていないのに、OnBecameVisible()が呼ばれたりと。
結論としては、オブジェクトの影がカメラ内にある場合は、表示状態となっている、というものでした。
例えば、以下のようにシーン配置し、Directional Lightを「もうじき沈むくらいの西日」にします。そうすると、シリンダの対面の壁にシリンダの影が映ります。
シリンダには、以下のようなコードを貼り付けて、シリンダがカメラに映っているならVisible、映っていないならInvisibleが表示されるようにします。
using UnityEngine; public class VisibleChecker : MonoBehaviour { public TextMesh text; private void OnBecameVisible() { text.text = "Visible"; } private void OnBecameInvisible() { text.text = "Invisible"; } }
すると、シリンダがカメラ内なら、
カメラ外なら、
となり、期待通りの動きなのですが、シリンダの影がカメラ内に映っている場合も、
となります。
影を付けながら、画面内にオブジェクトが映っている/映っていないときにOnBecameVisible(), OnBecameInvisible()が呼ばれるようにできないか頑張ってみましたが、結局対象オブジェクトは影がでないようにしました・・
よい方法ご存知の方、ぜひご連絡ください。