本文主要是介绍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
}
这篇关于Unity Vector3.Reflect反射线使用和计算原理(光打到平面上反射)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!