2D游戏中的定位跟踪【unity2d】

时间:2020-03-13 发布者: 访问量:3906

游戏中有时候我们需要对主角的位置进行判断获取,并由此知道两个点之间的方位和距离。

距离可以利用公式得到,但是方位利用简单的欧拉角和四元数的转换无法简单获取,这里我利用游戏开发中的实践经验和大家分享一下这个角度的获取。



如图,B需要知道A对B的角度,所以在已知A和B的Transform的Position下,如何获取这个角度,

 Angle_A_B = new Vector3(0, 0, Vector3.Angle(Word.transform.right, B.position - A.position));
我们只是获取了一个vector3,但是注意,这里我们不仅利用AB的位置获取角度,还利用到了世界坐标系的X轴,这个transform.right = (1,0,0)就是向右的X轴,即如图的β-α值,只不过是相对坐标系来说,但是这个不是我们想要的AB之间的角度,所以我们利用Vector3.angle()获取的是一个0-180的角度,之所以我们不使用Vector3.Equals,是因为我们选哟的是0-180的角度,而不是一个四元数,这个方法转来的只是空间旋转,而不是角度。

现在我们获取到了一个Vector3(0,0,0-180)的一个向量,但是其本身并不是一个角度,但是我们使用的时候,比如创建子弹的时候使用Instantiate()

//产生子弹,子弹有跟踪,在角度上加上Angle_A_B 偏移
Instantiate(Resources.Load("bullet/bulletEnemy"), transform.position,Quaternion.Euler(transform.eulerAngles +  Angle_A_B));

其中的第三个参数就是旋转,但是我们得到的是Vector3的一个偏转,所以这里才利用向量转四元数的操作,加上这个 Angle_A_B偏移角度,就完成了实时跟踪和角度偏移的计算,如下图魂斗罗部分内容的实现。

发布于
  用户评论
    生活编程