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

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

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

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

Q&A

解決済

1回答

314閲覧

if文でCollider2Dのnullチェックができてしまう理由。

退会済みユーザー

退会済みユーザー

総合スコア0

Unity

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

0グッド

0クリップ

投稿2017/08/18 08:33

###前提・実現したいこと

if文の条件判定は、bool値によるものだと思っていたのですが、Collider2Dのnullチェックで判定できてしまうのはなぜでしょうか?
if文の条件判定は、bool値以外に他にどんな判定が可能なのでしょうか?
また、これに関するマニュアルなどがありましたら、そちらも教えていただきたいです。

###該当のソースコード

・エラーにならない。「テスト2」が出力される。

C#

1 Collider2D collision2d = null; 2 if (collision2d) { 3 Debug.Log ("テスト1"); 4 } else { 5 Debug.Log ("テスト2"); 6 }

・コンパイルエラーになる。

C#

1 if (null) { 2 Debug.Log ("テスト1"); 3 } else { 4 Debug.Log ("テスト2"); 5 }

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

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

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

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

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

guest

回答1

0

ベストアンサー

https://docs.unity3d.com/jp/530/ScriptReference/Object-operator_Object.html
これでしょうか。nullチェックはif文の機能というよりUnity側の拡張という感じで、Unityにおける全クラスの親に当たるUnityEngine.Objectにboolのoperatorが拡張されています。

具体的には、if(obj)と入力すると、裏で
nullと比較するコードに変換されているようです。詳しくはUnityのソースコードに書かれてます。
https://github.com/MattRix/UnityDecompiled/blob/master/UnityEngine/UnityEngine/Object.cs

投稿2017/08/18 09:07

ruccho

総合スコア285

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

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

退会済みユーザー

退会済みユーザー

2017/08/18 16:11

ご回答ありがとうございます。 Unity側で拡張されていたのですね。 マニュアルやソースも貼っていただき、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問