使用差乘判断左右一般是比较差乘的y,小于0是左,大于0是右。特殊情况可以用其他分量来比较
默认情况:
var cross = Vector3.Cross(lhsObject.transform.position, rhsObject.transform.position); if (cross.y > 0) //side if(cross.y < 0)//another side
用forward方向,从而对有旋转的对象进行比较:
void OnCollisionEnter(Collision other) { Vector3 direction = other.contacts[0].point - transform.position; var cross = Vector3.Cross(transform.forward, direction); if (cross.y < 0) print ("Left"); else print("right"); }
用Transform的right就可以比较是否在前后,很常用,对于赛车游戏的路点等都会用到
y>0 a在b后,y<0 a在b前
var dir = a.position - b.position; var cross = Vector3.Cross(b.right, dir.normalized).y > 0; if (cross) return;
论坛上还看见一个demo,加深理解(得到forward,up方向,取得right,left):
// original vector: var forward: Vector3 = Vector3(0.5, 0.7, 0.8); // up direction: var up: Vector3 = Vector3(0.0, 1.0, 0.0); // find right vector: var right = Vector3.Cross(forward.normalized, up.normalized); var left = -right;