床を鏡面加工して、オブジェクトが反射して映るようにしましょう。
鏡面のような演出は、Reflection Probを使って効果を設定します。
このように床に反射して、オブジェクトと一緒に動いていきます。
オブジェクトの用意
Cubeと平面(Plane)を作成し、CubeのYを0.5にします。
CubeとPlaneにマテリアルをつけましょう。
Planeの色はグレーにして、メタリックを1、スムースネスを1に設定します。
床をわかりやすく確認するため、MainCameraの位置を変えましょう。
位置と回転をこのようにしました。
ゲームビューではこのような見た目になっています。
Cubeを動かせるようにします。
CubeMove.csを作成し、Cubeに追加します。
CubeMove.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CubeMove : MonoBehaviour { void Update() { float dx = Input.GetAxis("Horizontal") * Time.deltaTime * 3; float dz = Input.GetAxis("Vertical") * Time.deltaTime * 3; transform.position = new Vector3 ( transform.position.x + dx, transform.position.y, transform.position.z + dz ); } } |
Cubeを十字キー操作できるようになります。
Reflection Probによる鏡面仕上げ
空のオブジェクトを作成します。
GameObject(空のオブジェクト)に、Reflection Prob を追加します。
コンポーネントを追加 > レンダリング > リフレクションプローブ
このように、サイズ10の Reflection Prob が出来ています。
Reflection Probを以下のように設定します。
解像度を大きくすれば、反射体もきれいにうつりますが、その分、処理は重くなります。
次に、Reflection Probがメインカメラの反対側にくるように、スクリプトで制御します。
MirrorFloor.csを作成し、GameObjectに追加します。
MirrorFloor.csを記述します。
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 MirrorFloor : MonoBehaviour { ReflectionProbe rp; void Start() { rp = GetComponent<ReflectionProbe>(); } void Update () { rp.transform.position = new Vector3( Camera.main.transform.position.x, Camera.main.transform.position.y * -1, Camera.main.transform.position.z ); rp.RenderProbe(); } } |
プレイ、Cubeを動かしてみましょう。