虚拟摇杆的实现

UI的组成元素主要有两个,一个外框,一个圆,创建一个父物体,用来接受点击和拖拽事件,设置框和圆为父物体的子物体。父物体的碰撞体可以做大一点,点击到区域内的,调整父物体的位置到点击的区域,圆的相对坐标设为0。平常不用虚拟摇杆的时候可以设置框和圆的透明度为0.5那样,点击和出发拖拽再tween到1。拖拽OnDraw(Vector2 v)-NGUI,IDragHandler.OnDrag(PointerEventData d)触发计算设置圆的位置,注意限制在框的半径中,可以用Distance判断。


计算摇杆的方向,然后映射到主角的移动方向上

//计算摇杆控制的方向
Vector3 direction = point.position - transform.position;
direction = new Vector3(direction.x, 0f, direction.y);
direction.Normalize();

//映射到目标模型上,调整目标方向
target.LookAt(target.position + direction);
//计算相机的旋转偏差
Quaternion rot = Quaternion.Euler(0, camera.transform.eulerAngles.y, 0);
target.LookAt(rot * target.forward);


在3D的世界中,观察世界的相机不一定就是正方向的去观察世界的,也许是45的,所以当将摇杆方向映射到主角时,也需要考虑相机的角度。

比如说:摇杆方向(圆心在正上),映射方向为(0,0,1),主角向前走,相机无旋转在主角z轴后面对着它,刚好圆心向上,主角在相机的视野中也是向上(前)。当相机y轴以45°观察时,就没有对到主角的z轴,主角还是向前走,但是在视野中确不是向上了(不和摇杆同一方向),而是往左上走了,所以需要将方向同相机一样旋转45度纠正回来,达到视野的移动方向和摇杆的一致。


首页 我的博客
粤ICP备17103704号