XNAでゲームを作っています。
敵がプレイヤーを見ることができるかどうかを判断するために、敵からプレイヤーにレイキャストを行っています。コードはこちら..
private float RayCallBack(Fixture fixture, Vector2 point, Vector2 normal, float fraction)
{
rayhit = fixture.Body.UserData.ToString();
if (fixture.Body.UserData == "player")
{
//AIawake = true;
}
return 0f;
}
_world.RayCast(RayCallBack, _blocklist[0]._floor.Position , ConvertUnits.ToSimUnits(playerpos));
私の問題は、ブロックから作られた洞窟をプロシージャルに生成した写真の状況では、光線がブロックを通過しているように見えるため、敵が壁を通して見ることができることです。
--
アップデート
次のコードは機能します。しかし..理由がわかりません!! :/
private float RayCallBack(Fixture fixture, Vector2 point, Vector2 normal, float fraction)
{
rayhit = fixture.Body.UserData.ToString();
if (fixture.Body.UserData == "player")
{
return fraction;
}
else
{
return 0f;
}
}
次に、このクラスの別の更新ステートメントに、敵を目覚めさせるコードを含めます。
if (rayhit == "player") AIawake = true;
レイキャストとコールバックがどのように機能するかは明らかにわかりません。この方法が機能する理由を誰かが説明できれば、それは素晴らしいことです。敵が何かに衝突するのを止めるために、さらに多くのレイキャスティングを行うことを計画しています。