質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

0回答

1618閲覧

charactercontrollerを用いた斜面の落下

退会済みユーザー

退会済みユーザー

総合スコア0

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/05/12 11:04

わからないこと

先日charactercontrollerを用いたアクションゲームを制作していて、斜面を滑るようにしたく、何か方法はないか探していたところ、以下のコードで斜面の角度に応じて滑らせることができました。
(このような状況で滑り落ちるといものです)
イメージ説明

大まかな流れは理解できるのですが細かい点で理解できないところがあるので、説明するのは難しいかもしれませんが、もしわかる方がいれば教えていただきたいです。
1.lastHitPointのx座標を無限にする理由
2.**(hit.point - lastHitPoint).sqrMagnitude > 0.001f **この条件式の意味

該当のソースコード

このコードで斜面の角度を取得
public float groundAngle = 0;
public Vector3 groundNormal = Vector3.zero;

private Vector3 lastGroundNormal = Vector3.zero; private Vector3 **lastHitPoint**= new Vector3(**Mathf.Infinity**, 0, 0);

void OnControllerColliderHit(ControllerColliderHit hit)
{

if (hit.normal.y > 0 && hit.moveDirection.y < 0) { if (**(hit.point - lastHitPoint).sqrMagnitude > 0.001f** || lastGroundNormal == Vector3.zero) { groundNormal = hit.normal; } else { groundNormal = lastGroundNormal; } lastHitPoint = hit.point; } // 現在の接地面の角度を取得 groundAngle = Vector3.Angle(hit.normal, Vector3.up); }

このコードで滑らせる

void FixedUpdate()
{
Vector3 moveDirection = Vector3.zero;

// 中略 (ここで移動やジャンプに応じてmoveDirectionを修正) // 地上で斜面にいる場合はその方向へ滑らせる if (IsGrounded() && characterController.slopeLimit <= groundAngle) { float slidingSpeed = 5f; moveDirection.x += groundNormal.x * slidingSpeed; moveDirection.y -= groundNormal.y * slidingSpeed; moveDirection.z += groundNormal.z * slidingSpeed; } // CharacterControllerで移動 characterController.Move(moveDirection * Time.deltaTime);

}

public bool IsGrounded()
{
return characterController.isGrounded && (groundNormal.y > 0.01);
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問