|
先生「WPFで凹凸地形に合わせてキャラを上下させるには、キャラと地面の当たり判定を調べて、交点をキャラのY軸にセットすればよいのです。 以下の赤字のようにコーディングしてください」
//30ミリ秒ごとに呼ばれる関数
void Update3DEvent(object sender, EventArgs e)
{
(中略)
//剣士キャラに移動した変形行列をセット
Character_Grass_Swordsman.Transform = trans;
//地面と当たり判定
//pointはキャラの位置
Point3D point = new Point3D(pos.X, pos.Y, pos.Z);
//レイの向き
Vector3D dir = new Vector3D(0, -1, 0);
//キャラの位置からのレイのセット
RayHitTestParameters rayparams = new RayHitTestParameters(point, dir);
//レイが地面Character_Grass_Grassにヒットしたら
//ResultsOfHit関数を呼び出すようにセット
VisualTreeHelper.HitTest(
Character_Grass_Grass, null,
new HitTestResultCallback(ResultsOfHit), rayparams);
//カメラ位置
Camera_Grass.Position = new Point3D(pos.X + 3000, pos.Y + 1000, pos.Z + 3000);
//カメラの向き
Camera_Grass.LookDirection = new Vector3D(-3, -0.9, -3);
}
//地面とキャラとの距離だけY座標を移動
private HitTestResultBehavior ResultsOfHit(HitTestResult myresult)
{
RayHitTestResult rayResult = myresult as RayHitTestResult;
if (rayResult != null)
{
RayMeshGeometry3DHitTestResult rayMeshResult
= rayResult as RayMeshGeometry3DHitTestResult;
//レイがヒットした場合
if (rayMeshResult != null)
{
pos.Y = pos.Y + 10 - rayMeshResult.DistanceToRayOrigin;
return HitTestResultBehavior.Stop;//Exit
}
}
return HitTestResultBehavior.Continue;
}
|
|