Q&A
Inputsystemを使って二つのキーの同時押しで斜めにキャラクターを動かしたい!!!!!!(助けてください)
前提
OS windows 10
unityバージョン 2021.3.20f1
Inputsystemのバージョン 1.5.0
Inputsystemは Invoke Unity Eventsのコールバック式でやっています。
アクションマップのMove,Fire,Lookはデフォルトのままです
発生している問題・エラーメッセージ
Inputsystemを使ってキャラクターを移動させているのですが例えばWキーとDキーを同時に押してキャラクターを右上の方向に移動させたいのにどちらか一方のキーしか反応せず(同時押しというよりか先に押したキー以外受け付けなくなっている?)斜めに移動しなくて困っています。
↑WキーとDキーを同時に押しています
該当のソースコード
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.InputSystem public class chara : MonoBehaviour { Rigidbody rb; Vector2 moving; Vector3 movement; Vector3 forward; Vector3 right; Vector3 forwardD; Vector3 cameraForward; public float speeddeg; public float speed; public float rot; public float wkey; public float akey; public float skey; public float dkey; public Quaternion rotation; private Vector3 move; public void Start() { rb = GetComponent<Rigidbody>(); } public void Jump(InputAction.CallbackContext context) { if (context.started) { rb.AddForce(0f, 100f, 0f); //Debug.Log(context.phase); } } public void Move(InputAction.CallbackContext context) { if (context.action.name == "Move") { moving = context.ReadValue<Vector2>(); //たぶんここでキー入力を読んでいる } } public void FixedUpdate() { Vector3 Mforward = Vector3.Scale(Camera.main.transform.forward, new Vector3(1, 0, 1)).normalized; Vector3 Mright = Camera.main.transform.right; movement = moving.x * Mright + moving.y * Mforward; Vector3 moveforce = movement * speed; float degx = 0f - rb.velocity.x; float degy = 0f - rb.velocity.z; Vector3 revmovement = new Vector3(degx, 0f, degy); if (rb.velocity.magnitude < 10f) { rb.AddForce(moveforce, ForceMode.Acceleration); } if (moveforce == Vector3.zero) { rb.AddForce(speeddeg * revmovement); } transform.rotation = Quaternion.RotateTowards(transform.rotation, rotation, rot); //現在値から目標値までrotづつ回転 if (moveforce == Vector3.zero) return; rotation = Quaternion.LookRotation(moveforce, Vector3.up); //目標回転角 }
}
試したこと
原神で同時押しを試してみると斜めに動いたのでキーボードがバグってるとかではなさそうです。
デバッガーで見てみるとAキーとDキーを試しに同時押ししてみるとどちらも反応しているのでやはりスクリプトかInputsystemの使い方がどこか間違っているかが原因だと思います。
補足情報(FW/ツールのバージョンなど)
テスト用なのでグローバル変数がめちゃくちゃ多いですがそこは勘弁してください。
Google先生にもBingAIにもChatGPTにも質問しましたが答えは見つかりませんでした。
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。