码迷,mamicode.com
首页 > 编程语言 > 详细

unity2d 实现物体跟随鼠标绕一个点旋转效果

时间:2016-01-18 13:45:24      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:

    在2D游戏中,类似泡泡龙炮台发射、敌人飞机永远指向PLAYER、愤怒小鸟弹弓发射等效果,都需要用到物体跟随鼠标绕一个点旋转的效果,在unity中实现代码很简单,但是在理解上有一定障碍,因为unity是3D界面,他的旋转并不是2D世界中那么简单。

实现这种效果,可以使用两种方法,一种是采用角度计算,一种是采用向量运算;

1,角度运算容易理解,但是代码较为繁琐,可以参考

点击打开链接,

2,向量运算实现

1),向量运算简单复习

向量指具有大小和方向的几何对象,可以形象化地表示为带箭头的线段。

也就是说,向量不但具有大小,还有方向,我们这里就是利用向量的方向,来实现物体永远指向鼠标的。

向量相加:

技术分享

向量相加遵循平行四边形法则,OA+OB=OC,相加为四边形长边,相减就为四边形短边,且方向是由被减方指向减方

技术分享

2),UNITY中向量的运用

在unity中是三维坐标,绿色代表Y轴,红色代表X轴,蓝色代表Z轴。

如果需要只在平面进行旋转,就将Z轴永远等于0,XY轴变换即可。

如图:

技术分享

A代表鼠标坐标,B代表物体坐标,OA-OB=BA,BA就是黄线,指向A点,使用unity提供的 transform.up指向A点,就达到目的了。 transform.up在unity的API上只有一句话: transform.up的绿色轴,如图所示(绿色线条),其实是物体自身的Y轴坐标方向,加入Y轴方向等于黄色箭头方向,就达到旋转物体指向A点的目的了。

3),代码实现

 

技术分享
 1 using UnityEngine;
 2 using System.Collections;
 3 public class arrow : MonoBehaviour {
 4     void Update()
 5     {
 6         if (Input.GetMouseButton(0)) {
 7             //获取鼠标的坐标,鼠标是屏幕坐标,Z轴为0,这里不做转换
 8             Vector3 mouse = Input.mousePosition;
 9             //获取物体坐标,物体坐标是世界坐标,将其转换成屏幕坐标,和鼠标一直
10             Vector3 obj=Camera.main.WorldToScreenPoint(transform.position);
11             //屏幕坐标向量相减,得到指向鼠标点的目标向量,即黄色线段
12             Vector3 direction = mouse - obj;
13             //将Z轴置0,保持在2D平面内
14             direction.z = 0f;
15             //将目标向量长度变成1,即单位向量,这里的目的是只使用向量的方向,不需要长度,所以变成1
16             direction = direction.normalized;
17             //当目标向量的Y轴大于等于0.4F时候,这里是用于限制角度,可以自己条件
18             if (direction.y >= 0.4f)
19             {
20                 //物体自身的Y轴和目标向量保持一直,这个过程XY轴都会变化数值
21                 transform.up = direction;
22             }
23         }
24     }
25 }
View Code

 


 

unity2d 实现物体跟随鼠标绕一个点旋转效果

标签:

原文地址:http://www.cnblogs.com/wayhb/p/5138885.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!