ハツェの真時代傾向璋

興味を持ったことを書いていく鱗片的な場所から先の未来の場

誰でも操作できる同期uGUI - テキスト入力編

こんばんは。ハツェです。
今回も同期uGUIについて書いていきます。
他の記事でも紹介していますが、この記事は全4つからなるシリーズです。

  1. ボタン・トグル編
  2. スライダー編
  3. ドロップダウン編
  4. テキスト入力編

今回の動作環境は、Unity : 2018.4.20f1、VRCSDK : 2020.04.09.16.59、U# : v0.15.5です。

目次


追記

当記事は少し古めの物になります。
使用する際は、ContinuousSyncの手法にてお試しいただけますと正常に動作するかと思います。
予めご了承ください。

前回

前回はドロップダウンについて書きました。
hatuxes.hatenablog.jp

完成図

今回は下図(三人称視点)のInputField部分を紹介します。
他のUIも別の記事で紹介しています。

f:id:hatuxes:20200416160801g:plain

スクリプト

実装に使ったスクリプトはこちらになります。

using UdonSharp;
using UnityEngine;
using UnityEngine.UI;
using VRC.SDKBase;
using VRC.Udon;

public class InputField_Anyone : UdonSharpBehaviour
{
    InputField _inputField;
    [SerializeField] Text _contentText;

    [UdonSynced] string _content;

    void Start()
    {
        _inputField = this.gameObject.GetComponent<InputField>();
    }

    void Update()
    {
        _contentText.text = _content;
    }

    public void SetContent()
    {
        _content = _inputField.text;
    }

    public void ChangerOwner()
    {
        if (!Networking.IsOwner(Networking.LocalPlayer, this.gameObject)) Networking.SetOwner(Networking.LocalPlayer, this.gameObject);
    }
}


部分解説

ちょっと説明が無いので、解説をいくつかしていきます。
今回は、_contentがstringの同期変数です。

ChangeOwner

ChangeOwner()はEventTriggerのPointerDownで呼んでいます。
「EventTriggerって何?」と思った方は、ボタン・トグル編をご覧ください。

f:id:hatuxes:20200417154104p:plain

ボタンの時と実装は同じく、押し始めにその人がこのスクリプトのオーナーじゃなかったらオーナーにしてあげるようになっています。
また、EventTriggerでオーナーを移しているのは、少しでもオーナー移動時と変数代入時のフレームを分けるためです。

SetContent

SetContent()はInputFieldのOn End Editで呼んでいます。

f:id:hatuxes:20200417152734p:plain

そのため、打ち終わってEnterキーを押したときにSetContent()が呼ばれることになります。
SetContent()の中身は

_content = _inputField.text;

だけなので、Enterキーを押したら現在入力していた物を同期変数_contentに代入するといった処理のみになります。

あとがき

以上でこのシリーズの解説は終わりになります。
InputField自体はかなり便利なものなので、使い道はかなり広がりそうですよね。
これからのSDK3に期待です。

今回を含む同期uGUIのサンプルはまとめてGithubに置いてあります。
ライセンスを確認したうえで、お使いください。
github.com