Unity Vector3.Reflect反射线使用和计算原理(光打到平面上反射)

计算向量投射到物体上的反射向量
碰撞模拟:
public class test3 : MonoBehaviour
{Vector3 dir;Vector3 pos;private void Start(){dir = transform.right;pos = transform.position;}private void Update(){transform.position += dir * Time.deltaTime*4;}private void OnCollisionEnter2D(Collision2D collision){ Vector2 inDirection = (transform.position - pos).normalized;Vector2 inNormal = collision.contacts[0].normal;dir = Vector2.Reflect(inDirection, inNormal);pos = transform.position;}
}
射线模拟:
红线:inDirection
绿线:inNormal 法线
蓝线:Result 反射线
public Transform tsTarget;//目标点
void OnDrawGizmos()
{
#if UNITY_EDITORColor prevColor = Gizmos.color;//红线的方向Vector3 dir = tsTarget.position - transform.position;//从原点向终点打出一条红色的射线Gizmos.color = Color.red;RaycastHit2D hitInfo = Physics2D.Raycast(transform.position, dir, Mathf.Infinity);Gizmos.DrawLine(transform.position, hitInfo.point);//画红线//射线碰到碰撞物的法线Gizmos.color = Color.green;var normal = hitInfo.point + hitInfo.normal;//法线0,0点为基准,所以这里要加上碰撞点的位置Gizmos.DrawLine(hitInfo.point, normal);//画绿线Gizmos.color = Color.blue;Vector2 direction = (Vector2)hitInfo.point + Vector2.Reflect((Vector2)dir, (normal - hitInfo.point));//Vector2.Reflect求反射,但是会出现偏移,经过我反复验证得出的结果Gizmos.DrawLine(hitInfo.point, direction);//画蓝线Gizmos.color = prevColor;#endif
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
