前提・実現したいこと
Unityを使って2Dゲームを制作しています。
Light2Dを用いて光と影を描画し、
オブジェクトが「日向にいるか」「日陰にいるか」「両方(一部分だけ日向にいるような状態)」によって
オブジェクトの当たり判定を変更したいです。
状態によって当たり判定を変える部分はできてるのですが
オブジェクトがどの状態なのかを判定することが難しく、質問させていただきました。
試したこと
今実装しているやり方は、
光源の場所から光の出てる範囲内に常にRayを飛ばして、
当たったオブジェクトのスクリプトの変数を変えてオブジェクトの状態を変更する方法です。
しかしこの方法だと、
オブジェクト側で変数のリセットをしてあげないと一回当たるとずっと当たった判定になってしまいます。
更新スピードが速すぎても遅すぎても想定とは違った挙動になってしまうので更新するタイミングが分からないのと、大量に飛ばすため高負荷であるとご指摘もあったのであまり適していないのかもしれません。
何か他にいい方法があれば教えて欲しいです。
よろしくお願いします。
書いたコード
Ray側のコードです。
以下の処理を角度を変えながらずっとRayを飛ばしてしてます
オブジェクト側には
日向にいる判定をする変数onLightRayと日陰にいる判定をする変数onShadowRayがあります
bool hasTouchedBlock = false;//オブジェクトに当たったかどうかを記録する変数
//Rayに当たったオブジェクを全部見ていく
foreach(RaycastHit2D hit in Physics2D.RaycastAll(transform.position, vec, rayLength, layerMask))
{
//オブジェクトに当たった時
if(hit.collider.gameObject.transform.parent.gameObject.GetComponent<BlockObject>())
{
//当たったオブジェクトのコンポーネントを取得
BlockObject blockObject = hit.collider.gameObject.transform.parent.gameObject.GetComponent<BlockObject>();
//既に何かしらのオブジェクトに当たった後(既に当たってるってことは影の部分) if(hasTouchedBlock) { blockObject.onLightRay = true; } //初めてオブジェクトに当たった。(初めてってことは日向の部分) else { blockObject.onLightRay = true; this.hasTouchedBlock = true; } }
}
あなたの回答
tips
プレビュー