Slide 1

Slide 1 text

InputSystem ことはじめ Unity お・と・な のLT大会 2018 栗原 直哉 / @kuriharaan

Slide 2

Slide 2 text

InputSystem 新しいシステムが進行中 https://github.com/Unity-Technologies/I nputSystem

Slide 3

Slide 3 text

おことわり プレビュー版で変更の多い機能について話ます。 本資料もどんどん古い情報となって行きますので、 ご注意&ご容赦くださいませ

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

スケジュールとステータス https://forum.unity.com/threads/input-system-update. 508660/page-8#post-3870865 これから安定性にフォーカス ドキュメント、demo に取り掛かっていく

Slide 7

Slide 7 text

2019 1月 - 3月 ベータ

Slide 8

Slide 8 text

3月 2019.1で1.0-preview

Slide 9

Slide 9 text

2019.2 “Verified” 予定

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

今、使える? 基本の機能自体は動いてる

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

今、使える? 注意 まだ正式なプロダクトでの採用は慎重に

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

今、使える? ドキュメントはまだまだ Wikiの情報は古い

Slide 16

Slide 16 text

Tipsの一番上の項目がいきなり動かない Keyboard.current などない

Slide 17

Slide 17 text

今、使える? 機能を知るには パッケージの中のテストコードを見るのがおすすめ Packages/InputSystem/Test/

Slide 18

Slide 18 text

いままでのInputSystem UnityEngine.Input

Slide 19

Slide 19 text

いままでのInputSystem Input Manager ウィンドウで設定 ボタンとAxis、マウス Input.GetButton(“Jump”) Input.GetAxis(“Horizontal”) Input.GetKey(KeyCode.Space)とかも

Slide 20

Slide 20 text

いままでのInputSystem だいぶ古い ・設定項目がフラットで、構造体そのまま露出させたような ・ゲームプレイ側のアクションの定義として使いたい、  と思いきやユーティリティがここに定義を入れたり ・joystick button 2 とか毎度どれだったか

Slide 21

Slide 21 text

いままでのInputSystem ・ゲームプレイ側のアクションの定義として使いたい、  と思いきやユーティリティがここに定義を入れたりする

Slide 22

Slide 22 text

いままでのInputSystem https://blogs.unity3d.com/jp/2018/11/22/multi-platform-vr-features-in-2018-3/ 例えばUnityのマルチプラットフォームVRサンプル(画像はブログから)

Slide 23

Slide 23 text

いままでのInputSystem https://blogs.unity3d.com/jp/2018/11/22/multi-platform-vr-features-in-2018-3/ 例えばUnityのマルチプラットフォームVRサンプル(画像はブログから) 衝突しちゃう

Slide 24

Slide 24 text

レイヤーが足りてなかった たぶんレイヤーが足りてなかった。

Slide 25

Slide 25 text

抽象デバイス レイアウト作成 アクションのマッピング プレイヤーへのデバイスアサイン デバイス ゲームプレイ アクションのコンビネーション設定 ハイレベルでの欲求 欲しい要素

Slide 26

Slide 26 text

抽象デバイス レイアウト作成 アクションのマッピング プレイヤーへのデバイスアサイン デバイス ゲームプレイ アクションのコンビネーション設定 ハイレベルでの欲求 欲しい要素 new InputSystemでは InputSystem だいたいこんな感じ

Slide 27

Slide 27 text

導入 unityバージョン 2018.2.5f1以降 (2018.3で問題がある?とかで2018.3以降対応にシフトしていくっぽい   さっき見た情報)

Slide 28

Slide 28 text

導入 "com.unity.modules.xr":"1.0.0", "com.unity.inputsystem":"0.0.13-preview"  // <= 追加 }, "registry": "https://staging-packages.unity.com" // <= satging のレジストリを指定するため追加 } Packageのmanifest.jsonを書き換え

Slide 29

Slide 29 text

導入 もしくは githubから取得 clone or download https://github.com/Unity-Technologies/InputSystem 見てみるならそのまま使うでも。 Packageの中をコピーしてもよし。

Slide 30

Slide 30 text

導入 Player settings Bothにする(もしくはInputSystem(Preview))

Slide 31

Slide 31 text

Namespace クラスのネームスペースにはExperimental UnityEngine.Experimental.Input

Slide 32

Slide 32 text

Input Debugger エディタ上でデバイスの値をチェックできる

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

Input Action Maps

Slide 35

Slide 35 text

Input Action Maps

Slide 36

Slide 36 text

Input Action Maps Action Map 複数用意することも出来る (複数で実行すると今問題あるかんじ)

Slide 37

Slide 37 text

Input Action Maps Action jumpとかfireとか ゲームプレイっぽいこと定義するとこ

Slide 38

Slide 38 text

Input Action Maps BindingとかInteractionとか

Slide 39

Slide 39 text

Input Action Maps アクションの定義がアセットとして作れる SerializeFieldで受けて、任意のアセットを使用するように書ける (一つのActionMapsに複数のmapも書ける -> 今は問題あり) キーコンフィグのセットを切り替えるような実装が可能

Slide 40

Slide 40 text

コードからの参照 Generate C# Class にチェックを入れてApplyするとInputActionMap(例だとplayer)や それぞれのInputAction(例だとjumpなど)にアクセスしやすいクラスを作ってくれる

Slide 41

Slide 41 text

アクションイベント public class InputAction : ICloneable { … public event Action performed; public event Action started; public event Action cancelled;

Slide 42

Slide 42 text

アクションイベント public void Awake() { controls.player.move.performed += ctx => m_Move = ctx.ReadValue(); controls.player.jump.performed += ctx => { if (ctx.interaction is SlowTapInteraction) {

Slide 43

Slide 43 text

マルチ実装 現状、プレイヤーという概念はないぽい模様 (今後は不明) ActionMapの参照しているデバイスを指定することは可能なので、 いちおう出来る マルチのサンプルもこれから用意していくらしいので期待

Slide 44

Slide 44 text

マルチ実装 actionMap = controls.player.Clone(); InputSystem.onDeviceChange += (device, change) => { switch (change) { case InputDeviceChange.Added: { switch(allowDeviceType) { if (device is Gamepad) { actionMap.devices = new InputDevice[] { device };

Slide 45

Slide 45 text

振動 gamepad.SetMotorSpeeds(0.1234f, 0.5678f);

Slide 46

Slide 46 text

組み合わせ action.AddBinding("/gamepad/leftTrigger").ChainedWith("/gamepad/buttonSouth"); 今は呼ぶと、あれかも

Slide 47

Slide 47 text

いままでのInputSystemで マルチなどに対応するアセット Rewired https://assetstore.unity.com/packages/tools/utilities/rewired-21676

Slide 48

Slide 48 text

いままでのInputSystem 新しいInputSystemが入っても、すぐに無くなるというわけではない (らしい?)  取り掛かりやすくて、 とりあえず入力とるのには手早く書ける 共存すると良いのでは もしくは同じ感じのstatic classとか