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

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

新規登録して質問してみよう
ただいま回答率
85.51%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

10791閲覧

UnityでスクリプトからInputFieldの入力内容を変更する方法

Jiillsi

総合スコア8

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2018/01/31 13:35

編集2018/01/31 14:19

UnityでスクリプトからInputFieldの入力内容を変更したいと思っています。
Placeholderのテキストではなく、本来ユーザが入力する方です。

例えば、

C#

1GameObject.Find("InputField").GetComponent<Text>().text = "Hogehoge";

[追記訂正]×GetComponent ○GetComponentInChildren

などで変更しようとしてみてもうまくいかないです。
※単純に上のコードだけでやるとPlaceholderのテキストが変わってしまうので、(あまり美しいやり方ではないと思うけど)Hierarchy上でTextとPlaceholderの順序を入れ替えてやってます。

これは仕様上そもそも無理なものなのでしょうか?

やり方を知っている方がいらっしゃいましたら是非お教えください。

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

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

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

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

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

guest

回答2

0

ベストアンサー

GameObject.Findは重いのと、名前で検索するのは重複や変更で予期しない動作になるのでインスペクターからアタッチしてスクリプトで変更するのがいいと思います。とりあえずインプットフィールドの中身を変更するだけのコードを書いてみました。

1 下記コードをChangeInputField.csという名前にしてAssets配下に配置

C#

1using UnityEngine; 2using UnityEngine.UI; 3 4public class ChangeInputField : MonoBehaviour 5{ 6 [SerializeField] InputField TargetInputField; 7 8 void Start() 9 { 10 TargetInputField.text = "インプットフィールド"; 11 TargetInputField.placeholder.GetComponent<Text>().text = "プレースフォルダ"; 12 } 13}

2 インスペクターから上記スクリプトをアタッチして、該当のInputFieldをセット
イメージ説明

最後に

今回はシンプルに書く為に、スクリプト内でテキストを変更する仕様にしましたができればInputFieldのデータを管理するスクリプトから変更する仕様にするのがいいと思います。

投稿2018/01/31 13:59

編集2018/01/31 14:04
IShix

総合スコア1724

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

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

Jiillsi

2018/01/31 14:15

InputFieldの子供のTextオブジェクトのtextを変更しなきゃいけないと勝手に勘違いしてました… InputFieldコンポーネントの中にもtextとplaceholderがいたんですね。 しょうもない質問で申し訳ないです。
IShix

2018/01/31 14:39

いえいえ。色々参照方法があるのが問題だと思います。解決できそうで良かったです。 参照したいものがある時は一度インスペクタ上から該当コンポーネントを見てみると良いと思います。書かれている項目はほぼすべて参照or変更できます。ちなみにほぼ全てインスペクタ上の名前とスクリプトから参照する名前が一致しているのでわかりやすいです。 例) InputFieldのプレースフォルダ インスペクタ上の名前:Placefolder スクリプトから参照する場合の名前:InputField.placeholder
guest

0

InputField自体にはTextコンポーネントは無いので、そのコードだとエラーになってしまうのですが…。

それはさておき、以下のコードではどうでしょうか?

C#

1GameObject.Find("InputField").GetComponent<InputField>().text = "Hogehoge";

投稿2018/01/31 13:54

fiveHundred

総合スコア9739

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

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

Jiillsi

2018/01/31 14:08

すいません、よく確認せずに投稿してしまいました。GetComponetInChildrenの間違いです。 ですが、そもそも子供のTextオブジェクトのtextを変更しようとしてたのが間違いだったみたいですね… しょうもない質問してすみませんでした!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問