if文について、{}が無い場合と、ある場合の処理内容について見ていきましょう。
{}を省略して書くと、if()直後の一行だけが条件の対象となります。
ifの{}が無しの場合
Cube、Sphere、Capsuleのオブジェクトを作成し、横並びに配置します。
Cubeにリジッドボディを追加。回転を固定します。
CubeMove.csを作成し、Cubeに追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CubeMove : MonoBehaviour { void Update() { float dx = Input.GetAxis("Horizontal") * Time.deltaTime * 3.0f; float dz = Input.GetAxis("Vertical") * Time.deltaTime * 3.0f; transform.position = new Vector3 ( transform.position.x + dx, 0, transform.position.z + dz ); } void OnCollisionEnter(Collision collision) { if (collision.gameObject.name == "Sphere") Destroy(collision.gameObject); GetComponent<Renderer> ().material.color = Color.red; } } |
ゲームプレイして、Capsuleに触れたあと、Sphereに触れてみましょう。
Capsuleに触れたタイミングで、赤色になります。
OnCollisionEnter()は、他のオブジェクトに触れると実行するメソッド。
ifの{}無しの場合は、直後のDestroy()のみが条件の対象となるため、Sphereに触れて実行されるのはDestroy()だけになります。
そのため、Sphere以外のオブジェクトに触れただけで、Color.red は実行されます。
ifの{}がある場合
続いて、if文に{}を書き加えてみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CubeMove : MonoBehaviour { void Update() { float dx = Input.GetAxis("Horizontal") * Time.deltaTime * 3.0f; float dz = Input.GetAxis("Vertical") * Time.deltaTime * 3.0f; transform.position = new Vector3 ( transform.position.x + dx, 0, transform.position.z + dz ); } void OnCollisionEnter(Collision collision) { if (collision.gameObject.name == "Sphere") { Destroy(collision.gameObject); GetComponent<Renderer> ().material.color = Color.red; } } } |
ゲームプレイして、Capsuleに触れたあと、Sphereに触れてみましょう。
Capsuleに触れても何も起きず、Sphereに触れれば赤色に変わり、Sphereが消えます。
if文で実行する処理を{}で囲むと、囲まれた行がすべて条件の対象となります。
Capsuleにぶつかっても実行するものが何も無く、Sphereにぶつかった時だけ、Destroy()と、Color.red が実行されます。