The normal of the surface the ray hit.
// Calculate the reflection of a "laser beam" off a clicked object. // The object from which the beam is fired. The incoming beam will // not be visible if the camera is used for this! var gunObj: Transform; function Update () { if (Input.GetMouseButton(0)) { var hit: RaycastHit; var ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, hit)) { // Find the line from the gun to the point that was clicked. var incomingVec = hit.point - gunObj.position; // Use the point's normal to calculate the reflection vector. var reflectVec = Vector3.Reflect(incomingVec, hit.normal); // Draw lines to show the incoming "beam" and the reflection. Debug.DrawLine(gunObj.position, hit.point, Color.red); Debug.DrawRay(hit.point, reflectVec, Color.green); } } }
using UnityEngine; using System.Collections; public class Example : MonoBehaviour { public Transform gunObj; void Update() { if (Input.GetMouseButton(0)) { RaycastHit hit; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out hit)) { Vector3 incomingVec = hit.point - gunObj.position; Vector3 reflectVec = Vector3.Reflect(incomingVec, hit.normal); Debug.DrawLine(gunObj.position, hit.point, Color.red); Debug.DrawRay(hit.point, reflectVec, Color.green); } } } }
import UnityEngine import System.Collections public class Example(MonoBehaviour): public gunObj as Transform def Update() as void: if Input.GetMouseButton(0): hit as RaycastHit ray as Ray = Camera.main.ScreenPointToRay(Input.mousePosition) if Physics.Raycast(ray, ): incomingVec as Vector3 = (hit.point - gunObj.position) reflectVec as Vector3 = Vector3.Reflect(incomingVec, hit.normal) Debug.DrawLine(gunObj.position, hit.point, Color.red) Debug.DrawRay(hit.point, reflectVec, Color.green)