タグ

ブックマーク / nekojara.city (39)

  • 【Unity】Input Systemでローカルマルチを実装する

    Input Systemでは、PCなどに複数のゲームパッドを繋いでゲームをプレイするローカルマルチプレイヤーに対応しています。 これは、Player InputおよびPlayer Input Managerコンポーネントを用いることで簡単に実現可能です。 次のような挙動が実現できます。

    【Unity】Input Systemでローカルマルチを実装する
  • 【Unity】Input Systemからマウスカーソルを操作する

    Input Systemでは、マウスカーソルをゲームパッドなどから操作可能にするVirtual Mouseコンポーネントが提供されています。 これを用いると、次のようにゲームパッドのスティックなどでカーソル移動やクリックができるようになります。 このようにカーソルをマウス以外から操作する方法には、次の2通りがあります。

    【Unity】Input Systemからマウスカーソルを操作する
  • 【Unity】Time.deltaTimeによる移動の原理

    前提条件 記事では、時間・時刻を[s](秒)、距離を[m](メートル)、速さ・速度を[m/s](メートル毎秒)として単位を扱う事とします。 Unityの位置の単位はUnity unitとされており、デフォルトではメートルとして扱われます。 [1] 記事で扱う位置や距離の単位は、このデフォルト単位であるメートルとします。 また、記事はtransform.positionの更新による移動を対象とするため、Rigidbodyによる移動は取り扱いません。 Time.deltaTimeの基仕様 前回フレームから現在フレームまでの時間[s]を返すプロパティです。 処理落ちなどでフレームレートが低下すると、このTime.deltaTimeプロパティの値も大きくなります。 ただし、Time.maximumDeltaTime以上にならないように制限が設けられています。 これによって、極端な処理落ちで

    【Unity】Time.deltaTimeによる移動の原理
  • 【Unity】Actionの指定を便利にするInputActionPropertyの使い方

    インスペクターからInput SystemのActionを指定する時、直接指定なのかInput Action Assetの参照なのかを場面に応じて変える方法はないの? Input SystemのActionをスクリプトから扱う際、インスペクターからActionを指定する方法は主に次の2通りが考えられます。 Input Actionの設定内容を直接指定する Input Action Asset側で管理しているAction(参照)を指定する 両者はそれぞれデータの持ち方が別ですが、InputActionProperty構造体を使うと、同じスクリプトで動的にどちらの方法でActionを設定するかを切り替えることができます。 参考:Struct InputActionProperty | Input System | 1.5.1 InputActionProperty型として[SerializeF

    【Unity】Actionの指定を便利にするInputActionPropertyの使い方
  • 【Unity】Input SystemのAxis/Vector系Compositeのモードによる挙動の違い

    Input Systemでは、矢印キーやWASDキー、十字キーなどの複数ボタンを一つのスティック入力のように合成して扱うようにする手段をComposite Bindingとして提供しています。 [1] 参考:Input Bindings | Input System | 1.5.1 次の3種類が存在します。

    【Unity】Input SystemのAxis/Vector系Compositeのモードによる挙動の違い
  • 【Unity】Input SystemのBindingをインスペクターから指定可能にする

    using System; using UnityEngine; using UnityEngine.InputSystem; #if UNITY_EDITOR using UnityEditor; #endif [Serializable] public class InputBindingReference { // Actionへの参照 [SerializeField] private InputActionReference _actionRef; // BindingのGUID [SerializeField] private string _id; #region プロパティ // InputActionAsset public InputActionAsset Asset => _actionRef != null ? _actionRef.asset : null; //

    【Unity】Input SystemのBindingをインスペクターから指定可能にする
  • 【Unity】Input Systemでキーコンフィグを実装する

    Input Systemでは、キーコンフィグを実装するための機能が提供されています。 参考:Input Bindings | Input System | 1.5.1 これを用いると、次のようにキー入力を受け付け、操作に割り当てるといった画面や機能を実装できます。 これは、リバインド機能として提供され、特定の操作(Action)に対してキー設定を「上書き(Override)」する事で実現します。 上記動画のような入力されたキーで割り当てるといった一連のインタラクション(Interactive Rebinding)は、専用メソッドを通じて行えます。 キーコンフィグの実装の流れは次のようになります。

    【Unity】Input Systemでキーコンフィグを実装する
  • 【Unity2022】スプラインの経路情報をスクリプトから扱う

    スプライン(Splinesパッケージ)の経路情報をスクリプトから管理する方法の解説記事です。 これは、SplinePathクラスを用いると比較的楽に実現できます。 // スプライン SplineContainer splineContainer; ・・・(中略)・・・ // スプライン上の経路情報を作成する SplinePath splinePath = new SplinePath( new[] { new SplineSlice<Spline>(splineContainer.Splines[0], new SplineRange(0, 2)), new SplineSlice<Spline>(splineContainer.Splines[2], new SplineRange(0, 5)), } );

    【Unity2022】スプラインの経路情報をスクリプトから扱う
  • 【Unity2022】スプラインに最も近い点を取得する

    このような位置を取得するAPIが用意されているわ。SplineUtility.GetNearestPointメソッドを使えばいいの。 あるオブジェクトに最も近いスプライン上の位置を取得する方法の解説記事です。 これは、SplineUtility.GetNearestPointメソッドにより取得できます。 Spline spline; Vector3 pos; ・・・(中略)・・・ // スプライン上の直近の位置を求める float distance = SplineUtility.GetNearestPoint( spline, // スプライン pos, // 元の位置 out var nearestPoint, // 直近の位置が得られる out var t // 直近の位置における比率が得られる );

    【Unity2022】スプラインに最も近い点を取得する
  • 【Unity】Input Actionをスクリプトから動的に編集する方法

    Input Systemでキャラクターの移動やジャンプ操作などを扱う時は、これらをActionという単位で管理します。この Actionを動的に作成したり変更したり削除したりできます。 キーコンフィグを実装したい場合は、Actionの上書き機能を使うのが適しています。 [1] これは、下図のように変更とは少し異なる機能です。 上書き機能を使うことで、上書きしたデータのみをJSONとして保存したり、読み込んで適用したりできるようになります。 記事では、このようなInput Actionの内容をスクリプトから動的に作成・変更する方法を解説します。

    【Unity】Input Actionをスクリプトから動的に編集する方法
  • 【Unity】Input Systemの同時押しを排他制御する

    Input Systemで特定のボタンが押されている時だけ入力を受け付けなくするにはどうすればいいの? 例えば、Tabキーでは「進む」けど、Shift + Tabキーでは「戻る」のみ反応させたいの。 Input Systemでボタンの同時押しと片方押しを排他制御する方法の解説記事です。 例えばTabキーを使ったナビゲーションを実装するとき、Tabキー単体では「進む」操作になるが、Shift + Tabキーが押された場合は「戻る」操作となり、「進む」操作は実行されないようにしたい場合を想定します。 しかし、通常はShift + Tabを同時押しするとTabキーが押された時点で「進む」と「戻る」の両方の操作が実行されてしまいます。 [1] Input System 1.4.0以降ではこれらを排他制御する機能が追加されています。また、それ未満のバージョンでもComposite Bindingを自

    【Unity】Input Systemの同時押しを排他制御する
  • 【Unity】TextMesh Proでテキストを1文字ずつ表示する

    次のような文字送り演出を実装する方法の解説記事です。 実装方法は様々ですが、TextMesh Proであれば最大表示文字数をスクリプトから操作するだけで簡単に実現できます。 その他の方法としては、String.Substringメソッドを使ったり、1文字ずつ文字を追加したりする方法などが挙げられます。ただし、演出中に新しいStringオブジェクトが生成され続け、余分にメモリを消費してしまう弱点があります。 記事で解説する最大表示文字数を制御する方法では、このようなオブジェクト生成もなく、ゼロアロケーションで実現でき [1] 、更に実装も簡単というメリットがあります。 また、リッチテキストや絵文字などのタグを含むテキストにも対応できるというメリットも備えています。 TextMesh Pro公式のサンプルにも同様の例があり、以下のようなリッチテキストに対して最大表示文字数を制御することで実現

    【Unity】TextMesh Proでテキストを1文字ずつ表示する
  • 【Unity】Input Systemで連打防止を実現するInteraction

    Input Systemでボタンを短い間隔で連打できないようにする方法の解説記事です。 記事では、ボタンが押されたら一定時間だけ入力を受け付けなくするものとします。 実現方法は一通りではありませんが、Input SystemのInteractionを使用すると、次のメリットが得られます。

    【Unity】Input Systemで連打防止を実現するInteraction
  • 【Unity】LineUtilityで直線データを削減する

    LineUtilityクラスのSimplifyメソッドが使えるわ。LineRendererにも同様の機能がサポートされているわ。 Unityでは線に関する機能をまとめたLineUtilityクラスが提供されています。これは、直線データを削減(リダクション)するSimplifyメソッドただ一つを備えたクラスです。 LineUtility.Simplifyメソッドを使えば、次のように複数の点を直線で結んだデータを単純化することが可能です。 また、直線を描画するコンポーネントであるLineRendererコンポーネントでも同様の機能がサポートされており、内部的にはLineUtilityクラスのSimplifyメソッドが使われています。 記事では、LineUtilityクラスを用いて直線データを削減する方法について解説します。また、LineRendererの同様の機能についても触れます。

    【Unity】LineUtilityで直線データを削減する
  • 【Unity】Input Systemでボタンの押した瞬間/離した瞬間を判定する

    Input ActionのPress InteractionまたはButtonを用い、performedコールバックで検知する Updateイベント等から状態を毎フレームチェックする 特別な理由がない限り、1つ目のperformedコールバックで検知する方法が簡単かつ安全です。 2つ目の方法では、Input ManagerのGetButtonDownやGetButtonUpメソッドのような使い方でチェックができます。しかし、Input System側の設定次第では正常動作しなくなる事があり注意が必要です。 記事では、2種類の方法でボタンが押された瞬間、離された瞬間を判定する方法を解説します。使用上における注意点についても触れます。

    【Unity】Input Systemでボタンの押した瞬間/離した瞬間を判定する
  • 【Unity】Input Systemでピンチやマルチスワイプを実現する

    Input Systemを使ってスマホのピンチやマルチスワイプを実装するにはどうすればいいの? Input Systemを用いてタッチスクリーンのピンチインやピンチアウト、マルチスワイプなどの操作を判定する方法の解説記事です。 実装方法は一通りではありませんが、記事ではInput Action経由で検知する方法を紹介します。 Input Actionを経由して操作入力を判定することにより、次のメリットが得られます。

    【Unity】Input Systemでピンチやマルチスワイプを実現する
  • 【Unity】Input Fieldの入力形式を制限する

    編集可能なテキストのUIを提供するInput Fieldでは、入力可能な形式を制限したり修正したりすることができます。 例えば次のような入力形式が存在します。 整数入力を許容する小数入力を許容するアルファベットと数字を許容する単語の先頭を大文字に変換して入力するEmailアドレス形式の入力を許容するパスワード入力(入力文字をアスタリスク「*」で伏せる)PIN入力(アスタリスク「*」で伏せるが、数字入力のみ許容)独自の形式を定義して適用する このような形式はInput Field側でプリセットとして提供されていますが、独自の入力形式や補正処理などを適用することも可能です。 また、このような機能は一部を除き、TextMesh Pro版、レガシー版両方のInput Fieldで使用可能です。 [1] 記事では、Input Fieldの入力形式を制限したり、独自の形式を適用したりする方法について

    【Unity】Input Fieldの入力形式を制限する
  • 【Unity】ベクトルAPIの内部計算式まとめ

    Unityが提供するベクトル構造体では、ベクトルの計算を楽できるようなAPIが提供されています。 ベクトルには、Vector2、Vector3、Vector4の3種類の構造体があり、それぞれ2次元ベクトル、3次元ベクトル、4次元ベクトルを表します。 これらの内部実装は、Unity公式のGitHubソースからある程度閲覧可能です。 記事では、ベクトル構造体の内部処理を知りたい方向けに、代表的なプロパティやメソッドの内部で使われている数式をまとめました。 また、記事で示す数式は読みやすさのため、一部数式を整理しております。

    【Unity】ベクトルAPIの内部計算式まとめ
  • 【Unity】Input Systemでバーチャルパッドを実装する

    Input Systemを使えば簡単だわ。今回はOn-screen Controlsを使ってこの辺を実現する方法を教えるね。 Input Systemを使用してバーチャルパッドを実装する方法の紹介です。 これはInput Systemが提供する機能であるOn-screen Controlsを用いると楽に実装できます。 参考:On-screen Controls | Input System | 1.3.0 On-screen Controls最大の特徴は、バーチャルパッドのボタンやスティックなどの操作をデバイス入力値に直に反映させる点です。 On-screen Controlsにはボタン入力のOn-screen buttons、スティック入力のOn-screen sticksが予め用意されていますが、独自のカスタムコントロールを作ることも可能です。 記事では、On-screen Cont

    【Unity】Input Systemでバーチャルパッドを実装する