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

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

新規登録して質問してみよう
ただいま回答率
85.47%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

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

Q&A

解決済

1回答

1606閲覧

Inputsystemを使って二つのキーの同時押しで斜めにキャラクターを動かしたい!!!!!!(助けてください)

pimen

総合スコア6

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

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

0グッド

0クリップ

投稿2023/03/22 14:51

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にも質問しましたが答えは見つかりませんでした。

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

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

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

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

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

guest

回答1

0

自己解決

アクションマップのInteractionsが原因でした
イメージ説明
これを設定してしまうと2キーの入力を読み取れなくなるので何も設定しないようにしましょう
自分のやり方でinputsystemを使っている人は注意してください。

投稿2023/03/26 08:19

pimen

総合スコア6

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問