キャラクターを高角度の斜面に滑り込ませるにはどうすればよいですか?


9

現在、Unity3Dでキャラクターの動きに取り組んでいます。私はどうにかして彼をマウスカーソルに対して相対的に移動させました。傾斜制限を45°に設定しました。これにより、キャラクターはより高い角度で山を登ることができなくなります。しかし、彼はまだそれらをジャンプすることができます。

傾斜が高すぎる場所でジャンプしたときに、どうすれば彼を再び滑らせることができますか?

前もって感謝します。

編集:基本的な動きのコードスニペット。UnityEngineを使用します。System.Collectionsを使用します。

public class BasicMovement : MonoBehaviour {
    private float speed;
    private float jumpSpeed;
    private float gravity;
    private float slopeLimit;
    private Vector3 moveDirection = Vector3.zero;

    void Start() 
    {
        PlayerSettings settings = GetComponent<PlayerSettings>();
        speed = settings.GetSpeed();
        jumpSpeed = settings.GetJumpSpeed();
        gravity = settings.GetGravity();
        slopeLimit = settings.GetSlopeLimit();
    }

    void Update() {
        CharacterController controller = GetComponent<CharacterController>();
        controller.slopeLimit = slopeLimit;

        if (controller.isGrounded) {
            moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
            moveDirection = transform.TransformDirection(moveDirection);
            moveDirection *= speed;

            if (Input.GetButton("Jump")) {
                moveDirection.y = jumpSpeed;
            }

        }
        moveDirection.y -= gravity * Time.deltaTime;
        controller.Move(moveDirection * Time.deltaTime);
    }
}

詳細情報が必要です:物理を使用していますか?これらの斜面は地形システムなどを使用していますか?キャラクターをコントロールしているコンポーネントは何ですか?これは2Dまたは3Dゲームですか?
Kylotan

プレイヤーがジャンプしようとしたとき、またはジャンプを完了してスロープに当たったときにスライドするということですか?
tyjkenn

@tyjkennつまり、彼がジャンプを完了したときです。スーパーマリオ64のように、地面に着地し、この地面の角度が高すぎる場合は、角度がslopeLimitと等しくなるまで下にスライドする必要があります。
ケイナベル2012年

@Kylotanよく、私はUnityの初心者です。だから、私はできる限り良い答えを出すようにしています。キャラクターコントローラーでキャラクターを作成しました-リジッドボディはありません。キーが押されたときに彼を動かし、カーソルに対して相対的に歩くようにしました。地形を作成し、ボタンを使用して(ああ、これは愚かに聞こえるはずです)、山を作成しました。これは、WarCraft IIIのような外観とカメラスタイルの3Dゲームになります。
ケイナベル2012年

回答:


1

地面に当たったときのブレーキは間違っています。垂直方向の動きを止めるだけですが、それは地面が平らなときに地面に当たる方法だけです。

あなたがしなければならないmoveDirectionことは、ヒットした表面に投影することです、それはあなたに新しいを与えますmoveDirection。ライブラリに、使用する平面または表面にベクトルを投影する機能がある場合。そうでない場合はmoveDirection、サーフェスの法線への投影をmoveDirectionそれ自体から差し引く必要があります。


同じ動作を使用するゲームがあります。スカイリム、ブレーキングにはまったく同じ方法を使用します。問題は、旗の地面になくてもキャラクタージャンプできることです。
Ali1S232 2012年

0

キャラクターが地面に立っているかどうか、ジャンプする前に確認してください。それ以外は物理エンジンに任せます。

あなたが提供したコードに基づいて、私は問題がどこにあるかを見ることができます:

ユニティスクリプト参照CharacterController.isGrounded文字が地面に触れている場合にのみ返しています。それはslopelimitをチェックしません。少し検索した後、FPSWalkerEnhancedは問題を解決するもののようです。


まあ、私キャラクターがすべての動きの前に接地されているかどうかを確認します。
ケイナベル

@keinabelなら、彼はジャンプできないはずです。ジャンプを使用して坂を上ることができる唯一の方法は、しっかりとした地面にいなくてもジャンプできるかどうかです。つまり、彼が坂を上ることができないかどうかを確認するのと同じです。坂道が原因で少なくとも一方向に歩くことができない場合、彼はまったくジャンプできません。
Ali1S232 2012年

投稿に「移動コード」を追加すると役立ちますか?
ケイナベル2012年

私は問題をまっすぐに指摘できると思います。
Ali1S232 2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.