ゲームパッドを振動させるお話。
昔同じような記事を書いたのですが、新しい Input System を使えばもっと簡単にできます。
この記事にはUnity2020.3.21f1を使用しています。
.Netのバージョン設定には.Net4.x を使用しています。
最近でこそ再び記事を書き始めましたが、数年ほどこのブログが更新されていないことがありました。
そのため、古い技術が多いほど多いほど……。
そんな中で、ゲームパッドを振動させる記事があったので更新したいと思います。
InputSystemを使ってゲームパッドを振動させる
新しい InputSystem を使えばゲームパッドを振動させるのは随分簡単になりました。
InputSystem についてはこちらの記事をご参考ください。
www.urablog.xyz
振動させる方法は、 Gamepad
クラスの SetMotorSpeeds()
を呼ぶだけ。
簡単ー!
公式ドキュメントのQAにも書いてありますしね。
forpro.unity3d.jp
じゃあ早速使ってみましょう。
// GameManager.cs using UnityEngine; using UnityEngine.InputSystem; public class GameManager : MonoBehaviour { private void Start() { Gamepad gamepad = Gamepad.current; if (gamepad != null) { gamepad.SetMotorSpeeds(0.5f, 1.0f); } } } // class GameManager
はい、ゲームパッドが振動し始めました。ブルブル……
とても簡単でしたね。ブルブル……
これでゲームのフィードバックが出てより面白く……、ブルブル……
ってゲームパッドの振動が止まんねぇな!
SetMotorSpeeds()
に渡す引数って時間と周期じゃないの!?
はい、ちゃんとドキュメントを読みましょうねー。
docs.unity3d.com
えーと、第1引数が lowFrequency
, 第2引数が highFrequency
ですね。
低周波と高周波言われてもなんのことやら……。
ドキュメントを見る限り、lowFrequency
が左のモーター、 highFrequency
が右のモーターだそうです。
なるほど左右のことか!
そして渡す数値は 0.0 - 1.0 で速度なわけですね。
勝手に 0.0 にはならないので、振動させた後に自分で 0.0 をしなきゃ振動が止まらんわけですね。
コードを修正しましょう。
// GameManager.cs using UnityEngine; using UnityEngine.InputSystem; using System.Collections; public class GameManager : MonoBehaviour { private IEnumerator Start() { Gamepad gamepad = Gamepad.current; if (gamepad != null) { gamepad.SetMotorSpeeds(1.0f, 1.0f); yield return new WaitForSeconds(3.0f); gamepad.SetMotorSpeeds(0.0f, 0.0f); } } } // class GameManager
はい、今度こそOKです。
無事振動が収まりました。
世の中どんどん便利なって助かりますね。