-1

Opsive の Third Person Controller アセットを使用しています。アニメーション、ダメージ、移動、入力などを制御する、かなり複雑なサードパーソン コントローラーです。 http://opsive.com/assets/ThirdPersonController/documentation.php

ControllerHandler.cs スクリプトを更新して、カメラの向きに関係なく、キャラクターが向いている方向にキャラクターを移動させたいと考えています。(古いバイオハザード ゲームのスタイルで)

元のスクリプトでは、キャラクターはカメラが向いている方向に関連して前方に移動します。

このスクリプトの行を変更するようにアドバイスを受けましたが、変更により、キャラクターは一定の方向に進みます。(例: D キーで右に曲がり、W を押して前に進むと、キャラクターは元の方向に戻り、その方向に移動します。)

スクリプトの元の部分は次のとおりです。

#if ENABLE_MULTIPLAYER
            if ( isLocalPlayer) {
#endif
            if (m_Controller.Movement == RigidbodyCharacterController.MovementType.Combat || m_Controller.Movement == RigidbodyCharacterController.MovementType.Adventure) {
                m_LookRotation = m_CameraTransform.rotation;

誰かが私にそれを変更するように言ったのは次のとおりです。

#if ENABLE_MULTIPLAYER
            if ( isLocalPlayer) {
#endif
            if (m_Controller.Movement == RigidbodyCharacterController.MovementType.Combat || m_Controller.Movement == RigidbodyCharacterController.MovementType.Adventure) {
                m_LookRotation = Quaternion.Euler(PlayerInput.GetAxisRaw(Constants.YawInputName), 0, 0);

残念ながら、これは私が意図した結果にはなりません。

どんな援助でも大歓迎です。ありがとう!

コントローラー スクリプトへのリンクは次のとおりです

4

2 に答える 2

1

私はあなたが欲しいと思います

 transform.position += transform.rotation * Vector3.forward;

コードの完全なブロックは次のようになります...

 void Update() {
      if (Input.GetKey(KeyCode.W)) {
           transform.position += transform.rotation * Vector3.forward * MOVESPEED;
      }
 }
于 2016-03-04T04:48:24.807 に答える
0

私はそれを機能させました。最初に画像を見てください。プレーヤーを正しくセットアップするのに役立ちます。私のプレーヤーはたった 2 つのキューブです。2 つ目の立方体を追加して、プレイヤーが指している場所に面を付けました。これらの 2 つの立方体を親オブジェクトに追加し、親オブジェクトを自分のPlayerMovement.cs.ここに画像の説明を入力

public float rotSpeed;
public float playerSpeed;

    void Update()
    {
        if (Input.GetKey(KeyCode.RightArrow))
        {
            transform.Rotate( Vector3.up,  Time.deltaTime * rotSpeed);
        } else if (Input.GetKey(KeyCode.LeftArrow))
        {
            transform.Rotate(-Vector3.up, Time.deltaTime * rotSpeed);
        }
        if (Input.GetKey(KeyCode.UpArrow))
        {
            transform.Translate(Vector3.forward * Time.deltaTime * playerSpeed);
        } else if (Input.GetKey(KeyCode.DownArrow))
        {
            transform.Translate(-Vector3.forward * Time.deltaTime * playerSpeed);

        }
    }
于 2016-03-04T05:31:38.687 に答える