LoginSignup
0
1

More than 3 years have passed since last update.

Unity 3D入門 #12 [HQ Modular RE Mansionによる建物の建築&壁抜け,壁登り修正]

Posted at

まず、HQ Modular RE Mansionのデモシーンの建築をゲームを作っていたシーンに挿入しましたが、建物があまりにも重すぎてUnityがフリーズしてしまいました。付属のプレハブを使って自分で建物を作ります。

壁を設置した際に片側からはしっかりと壁が見えるのに、反対側から壁が透けて見えてしまい、当たり判定もすけた側には存在しない事態に遭遇しました。

スクリーンショット 2020-07-31 15.59.54.png
見える側

スクリーンショット 2020-07-31 16.00.02.png
透ける側

これは、
スクリーンショット 2020-07-31 16.02.07.png
スクリーンショット 2020-07-31 16.02.29.png
このように同じ位置に180度回転させた同じ壁を配置することで解消しました。

追記:上の画像ではxyz座標が全く同じ所にwallとwall(1)を配置しましたが、その場合見た目上二枚の壁の間に隙間ができてしまいましたので、wall(1)のz座標を変更することで二つが重なるようにしました。

また、プレイヤーが壁抜けをしてしまう不具合がありましたので、http://tsubakit1.hateblo.jp/entry/2016/07/09/235856 を参考にプレイヤーのRigidbodyのCollision DetectionをContinuosに変えることで解決しました。また、FixedTimeStepを0.02から0.01としました・

プレイヤーが一人称視点を上に向けたまま壁に向かって走ると壁を駆け上がってしまう不具合が生じました。
これは視点方向に向けてプレイヤーに特定の力を加えることで移動しているため、上方向に力が働いてしまったことが原因と考えられます。

float h = Input.GetAxis ("Horizontal"); // 入力デバイスの水平軸をhで定義
float v = Input.GetAxis ("Vertical");  // 入力デバイスの垂直軸をvで定義
if (Mathf.Max(Mathf.Abs(v), Mathf.Abs(h)) > 0.1) {
    velocity = new Vector3 (h, 0, v);  // キー入力から方向ベクトルを導出         
    velocity = cameraObject.transform.TransformDirection (velocity);  // キャラクターのローカル空間での方向に変換
    velocity = new Vector3 (velocity.x, 0, velocity.z);  //上下方向の力をゼロにする
    velocity *= forwardSpeed;  // 移動速度を掛ける
    transform.localPosition += velocity * Time.fixedDeltaTime;
}

このようにプレイヤーの移動において上下方向の力をゼロにします。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1