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

在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 }

				
时间: 2024-08-09 06:33:58

unity2d 实现物体跟随鼠标绕一个点旋转效果的相关文章

二维物体跟随鼠标移动

理解 mousePos - transform.position 鼠标的位置减去挂在此脚本上物体的位置 z = -Vector3.Angle(Vector3.up, mousePos - transform.position); Vector3.up为(0,1,0),这句话暂时理解为(0,1,0)和mousePos - transform.position夹角 //Canvans下的物体 2 public RectTransform UGUICanvans; 3 //当前主相机 4 public

【Unity笔记】物体朝着鼠标位置移动

其实思路也很简单,就是先获取到鼠标的坐标,然后赋值给目标物体即可. void Update(){ // 物体跟随鼠标移动 Vector2 mousePos = Input.mousePosition; gameObject.transform.position = mousePos; } 这是物体即时改变位置的做法,如果想要物体朝鼠标位置缓慢移动(有过程时间),可以尝试用Vector2.Lerp().

分享一个很有意思的js,动态时钟显示,能跟随鼠标移动

原文:分享一个很有意思的js,动态时钟显示,能跟随鼠标移动 源代码下载地址:http://www.zuidaima.com/share/1550463688182784.htm

javascript 跟随鼠标移动的提示框的一个小demo

下面提供一种跟随鼠标移动的提示框的思路,方便在以后工作中应用,主要是应用到鼠标移动产生的数值来进行移动提示框的定位... CSS代码   .box{height:100px;width:100px;background:orange;position:relative;margin:40px;} .move{height:20px;width:20px;background:red;position:absolute;left:0px;top:0px;display:none;} HTML代码

【jQuery】一个跟随鼠标运动的图层

一.基本目标 写一个跟随鼠标运动的图层, 图层中显示当前鼠标的位置, 如下图, 此图层之所以使用jQuery,而不是因为javascript,是因为jQuery的代码其便于兼容当前的所有主流的浏览器,至少IE8是没有任何问题的,不用像javascript大段大段的代码都用到兼容性上面了-- 二.制作过程 本次实验的核心是jquery里面的mousemove事件, 鼠标移动则触发. 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tran

unity3d GL画线/物体跟随/坐标系转换

看见标题的人是不是在想... 一个小小的GL画线难吗? 一个小小的物体跟随难吗? 嗯,的确,一点不难.... 我一开始也是像你们那样想的,但是实际操作起来,还是和理论有区别的 写这个demo起因是这样的: 面试到了一家虚拟现实的公司,因为没有去公司 网上直接谈的,谈妥了hr估计是想看看我能不能胜任 给了我一张效果图,让我去实现画线的功能 咳咳,要求还是比较细致的,这里我们后面说 废话不多说,老规矩,先上效果图,然后直接进入主题 第一张是hr给我的图,第二张是我自己实现的 需求如下: 1.模型是旋

win10 指针焦点自动跟随鼠标

Linux或者ubuntu系统中有个Focus-follows-mouse功能:鼠标指哪,键盘的焦点就指向哪,甚至可以让鼠标所在的窗口实时处于最顶层,达到真正的焦点跟随鼠标.通俗的讲就是,如果在多窗口的状态下,如果我们要对其中一个窗口进行一些操作,必须点击一下那个窗口(目的是让该窗口获取焦点),而focus-follow-mouse 功能让你只需要将鼠标指针移动到该窗口上面就可以对该窗口进行操作,不需要再点击一下.看似一个很简单的功能,确极为方便(尤其是对题主这种不喜欢在触控板上做点击操作的人)

鼠标悬浮弹出跟随鼠标移动的带箭头的信息层

鼠标悬浮弹出跟随鼠标移动的带箭头的信息层:很多网站,当鼠标悬浮在一个元素上的时候能够弹出一个信息说明层,并且此层能够跟随鼠标移动,同时弹出的层带有箭头,此箭头指向鼠标悬浮的元素,下面就通过实例代码简单介绍一下如何实现此效果.代码实例如下: <!DOCTYPE html> <html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"

OpenGL学习笔记3 —— 绘制3D物体、鼠标交互、反向变换

/* reference http://nehe.gamedev.net/article/using_gluunproject/16013/ */ #include <windows.h> // windows系统要加这个.因为下面2个头文件的一些宏是在这个文件中定义的 #include <gl/Gl.h> #include <gl/glut.h> //这两个头文件在OpenGL程序中几乎必加. #include <cstdio> //标准输入输出,用来打印