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

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

新規登録して質問してみよう
ただいま回答率
85.37%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Unity

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

Q&A

解決済

2回答

1964閲覧

unity c# if文

sashiburi

総合スコア20

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Unity

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

1グッド

0クリップ

投稿2020/08/23 08:07

現在unityでゲームを作成しています。

ドロップボックスにコード内でオプションを追加しようとしているのですがやり方を検索したら下のようなコードが出てきたのですが意味が分からず困っていますif文の()内は何かしらの式が入るのかなと思っていたのですがこれはどういう意味なのでしょうか?

コード using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class DropdownTest : MonoBehaviour { public Dropdown dropdown; //操作するオブジェクトを設定する // Use this for initialization void Start () { if (dropdown) {  ←ここ dropdown.options.Clear(); //現在の要素をクリアする dropdown.options.Add(new Dropdown.OptionData("1"));//新しく要素を追加する dropdown.options.Add(new Dropdown.OptionData("2")); dropdown.options.Add(new Dropdown.OptionData("5")); dropdown.value = 1; //デフォルトを設定(0~n-1) //dropdown.RefreshShownValue();//更新を確認(画像を設定したとき) } } }
CodeLab👍を押しています

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

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

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

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

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

guest

回答2

0

if文の()の中は、A==Bのような比較演算子を使った式である必要はありません。
if文が条件判断の為に見ているのは、()の中の式の値が、真か偽かという点だけなのです。
なので、そこが真偽値であれば、演算子が無くともかまいません。

逆に言えば、真偽値でなければならないので、Dropdownクラスが真偽値へとキャストできる必要があります。

投稿2020/08/23 08:14

編集2020/08/23 08:28
amiya

総合スコア1218

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

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

Zuishin

2020/08/23 08:24 編集

() の中は式でなければいけません。値や変数は次のように式になります。 https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/language-specification/expressions > An expression is classified as one of the following: > ・ A value. Every value has an associated type. > ・ A variable. Every variable has an associated type, namely the declared type of the variable. また、dropdown は Dropdown クラスのオブジェクトなので、Dropdown が bool に暗黙のキャストができないクラスであればコンパイルエラーになります。
amiya

2020/08/23 08:29 編集

なるほど。確かに、単体の数値リテラルとかも、式ですね。訂正します。 ありがとうございます。
guest

0

ベストアンサー

C#では、変数やオブジェクトの初期値はnullです。
Dropdownクラスが何かわかりませんが、エディター上なり別のスクリプトなりでインスタンス化したオブジェクトがdropdownに代入されてnull以外の数値になります。

よって、該当のif分は、dropdownにインスタンス化したオブジェクトが入っていたら(つまり初期化されていたら)処理する。というような意味かと思います。

投稿2020/08/24 06:24

CodeLab

総合スコア1939

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

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

Zuishin

2020/08/24 06:31

null と false は違います。
CodeLab

2020/08/24 07:28 編集

行儀がいいかどうかは別にして、実際にこの記述方法でもコンパイルエラーもワーニングも出ません。(少なくともUnityエディタでは) 確かに、あなたのおっしゃるように、if分は式であった方が誤解は少ないかと思います。 if(dropdown != null)
Zuishin

2020/08/24 07:31

dropdown に null を入れて確かめてください。出るはずです。
Zuishin

2020/08/24 07:34

もしも、古い古い Unity で JavaScript を書いているのであれば、C# で試してください。この質問は C# です。
tamoto

2020/08/24 07:43

Unity の Dropdown はドキュメントを読んだ限り、bool への暗黙変換で not null 判定が行えるという地獄みたいな実装がなされており、設計の是非はさておき問題なく動くと思いますよ。 この回答は全ての行がそれぞれ正しいのですが、繋げて読むと null と false を混同しているように読み取れ、不親切だとは思います。
ozwk

2020/08/24 07:49 編集

> CodeLabさん UnityEngine.UI.Dropdownは UnityEngine.Objectを継承していて こいつはbool型変換演算子を持っていて nullじゃないかどうかを返します。 だから動きとしてはnullじゃないかどうかを返すんですけど、 Dropdownクラス側にそういう仕組みがあることを説明しないと誤解を生むかなと (UnityEngine.Objectを継承しないプレーンなクラスでもできると誤解しかねない)
Zuishin

2020/08/24 07:46

> Dropdownクラスが何かわかりませんが、 と書いてあるので、どんなクラスでも可能のように読むことができます。 暗黙のキャストができるクラスについては amiya さんの回答のコメントで書いていますので、それを読んだ上でこの回答という前提のコメントです。
CodeLab

2020/08/24 08:21 編集

理解に誤解があったので削除しました
CodeLab

2020/08/24 08:12

> ozwk さん > tomatoさん あーなるほどようやく意味が分かりました。 DropdownはUnityで実装しているというところが抜けていましたので、その実装がわかってないと確かに私の回答は不適切ですね。 失礼いたしました。
Zuishin

2020/08/24 08:13 編集

入れ違いになったので削除
shiena

2020/08/29 13:30

Unityが提供するクラスはこのObjectを継承していて if (dropdown) と if (dropdown != null) は同じ意味となります。Monobehaviourを継承した自作クラスも同様に判定できます。 Unity C#の特殊な挙動なので普通のWindowsアプリやASP.NETではエラーになる書き方です。 https://docs.unity3d.com/ja/current/ScriptReference/Object-operator_Object.html
Zuishin

2020/08/29 13:49 編集

> Unity C#の特殊な挙動なので普通のWindowsアプリやASP.NETではエラーになる書き方です。 違います。Unity でも普通に System.Object から直接派生したクラスではエラーになります。言語の差ではありません。そのように作ったクラスを使ったというだけです。
Zuishin

2020/08/29 13:38

例えば string で試せば、エラーになるのがわかります。List<T> でもなります。Task でもなります。
shiena

2020/08/29 13:42

> Unityが提供するクラスはこのObjectを継承していて 言葉足らずですみません、Unityなら必ずできるという意味ではなく、この部分にかけたものと汲んでいただければ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問