获取角度 ,官方提供了 Vector2.Angle 来得值,他的值是在 0  ,180之间

原始代码是

    public static float Angle(Vector3 from, Vector3 to)
{
return Mathf.Acos(Mathf.Clamp(Vector3.Dot(from.normalized, to.normalized), -1f, 1f)) * 57.29578f;
}

注意最后一个是 180/ 3.1415926...  =  57.29578f;正常角度是 360,所以我们可以先 做出 -180,180之间

你可以

  float angle_180(Vector2 from, Vector2 to)
{
Vector3 v3;
Vector3 v3_from = new Vector3(from.x, from.y, 1);
Vector3 v3_to = new Vector3(to.x , to.y , 1);
v3 = Vector3.Cross(v3_from, v3_to);
if (v3.z > 0)
{
return Vector2.Angle(from, to);
}
else
{
return -Vector2.Angle(from, to);
}
}

也可以这样写

   float VectorAngle(Vector2 from, Vector2 to)
{
float angle; Vector3 cross = Vector3.Cross(from, to);
angle = Vector2.Angle(from, to);
return cross.z > 0 ? -angle : angle;
}

0,360之间可以这样写

 if (angle < 0)
{
angle = 360 + angle;
}

但是,我今天要说的不是这些,这些百度都可以知道。

我说的是 Vector2.Angle  的 bug以上的操作,仅仅对于 起始点0,0  有效,如果起始点 其他坐标,那么 他将会有误差

那么我们改怎么做呢?

这样写,可以没有误差,注意 initPosition是目标坐标

 Vector2 v2 = (mousePosition - initPosition).normalized;
float angle = Mathf.Atan2(v2.y, v2.x)*Mathf.Rad2Deg;
if(angle < 0)
angle = 360 + angle;

参考老外聊天,这个问题也是我 发现后 google 找的。

http://answers.unity3d.com/questions/444414/get-angle-between-2-vector2s.html

Vector2.Angle 的 bug的更多相关文章

  1. [Unity游戏开发]向量在游戏开发中的应用(三)

    本文已同步发表在CSDN:http://blog.csdn.net/wenxin2011/article/details/51088236 在上一篇博客中讲了利用向量点乘在游戏开发中应用的几种情景.本 ...

  2. 【Unity3D】计算二维向量夹角(-180到180)

    在Unity3D中,有时候我们需要计算二维向量的夹角.二维向量夹角一般在0~180度之前,可以直接调用Vector2.Angle(Vector2 from, Vector2 to)来计算. 但是在有些 ...

  3. 用Unity开发HTC VIVE——移动漫游篇

    这篇文章主要写的是通过手柄控制移动在场景中漫游.在通过手柄控制移动时,我主要写了两个脚本一个ChildTransform.cs.Move.cs;1. ChildTransform这个脚本主要是为了获取 ...

  4. Unity3D 双摇杆 c# JoyStick 实现自己的双摇杆

    转载请声明: http://www.cnblogs.com/ADaii/p/3859520.html Untiy3D 官方摇杆脚本只能完成一个摇杆,要实现双摇杆比较费劲 现在我吧我废了一通宵的结果共享 ...

  5. Unity的HTC VIVE SDK研究(手柄按键功能的研究,比较详细)

    http://blog.csdn.net/ystistheking/article/details/51553237 想交流的朋友我们可以微博互粉,我的微博黑石铸造厂厂长 ,缺粉丝啊 .....求粉求 ...

  6. 3D数学基础(二)向量

    向量的基本运算包括加法.减法.点乘.叉乘.单位化运算等,而在游戏开发中使用最为广泛的是减法.点乘.叉乘.单位化运算.向量是具有方向和长度的矢量,有2D.3D.4D等的.在游戏开发里面一般使用的是2D和 ...

  7. Unity API 解析 (陈泉宏著)

    1 Application类 2 Camera类 3 GameObject类 4 HideFlags类 5 Mathf类 6 Matrix4x4类 7 Object类 8 Quaternion类 9 ...

  8. UGUI 旋转时钟功能

    两种模式: 1.Screen Space-Overlay public void OnDrag(PointerEventData eventData) { Vector2 targetDir = ev ...

  9. unity下的Line of Sight(LOS)的绘制

    先说说什么是Linf of Sight.在很多RTS游戏中,单位与单位之间的视野关系经常会受到障碍物遮挡.Line of Sight指的就是两个物体之间是否没有障碍物遮挡. 比如在dota中,玩家的视 ...

随机推荐

  1. OpenGL多视口

    #include <gl/glew.h> #include <gl/freeglut.h> #include <iostream> ; ; float rtri = ...

  2. MC-设置 止盈

    using System; using System.Drawing; using System.Linq; using PowerLanguage.Function; using ATCenterP ...

  3. VMware 下的Linux系统远程连接putty

    ifconfig查看ip地址 虚拟网卡需要自己新建  nat8 putty不能显示中文的解决办法 http://jingyan.baidu.com/article/5552ef47df8a97518f ...

  4. Python 学习笔记7

    今天很残酷,明天很残酷,后天很美好.但绝大多数人会死在明天的路上.只有真正的勇士才能看到后天的太阳! Python学习是枯燥的.但是一定要坚持! 昨天学习了数据结构和模块. 今天学习输入和输出.错误与 ...

  5. pickView不需要明确设置高度

    pickView不用设置高度,若设置了,在iOS8.4.1上不会被填充,会造成没有把pickView高度设置成你想要的,但是布局其他地方的时候却会从你设置的地方开始,就会造成布局不紧挨着或者遮盖着的效 ...

  6. C# 调用C++ DLL 的类型转换

    //C#调用C++的DLL搜集整理的所有数据类型转换方式,可能会有重复或者多种方案,自己多测试 //c++:HANDLE(void *) ---- c#:System.IntPtr //c++:Byt ...

  7. pt-heartbeat监控延时

    测试国内主机到国外主机mysql的延时 主机 perl /usr/bin/pt-heartbeat -uroot --ask-pass  -D uk --create-table --update  ...

  8. Android jni编辑.so库

    引自:http://www.cnblogs.com/sevenyuan/p/4202759.html 1. 在Eclipse中创建项目:TestJNI 2. 新创建一个class:TestJNI.ja ...

  9. iOS导航栏主题

    主要是取得导航栏的appearance对象,操作它就设置导航栏的主题 UINavigationBar *navBar = [UINavigationBar appearance]; 常用主题设置 导航 ...

  10. 如何用脚本快速修改IP地址(Netsh)

    如何用脚本快速修改IP地址(Netsh) 如果通过Windows的网络属性修改Ip/网关,真是太麻烦了.最近一个项目经常要切换ip,所以我写了两个脚本:c:\116.bat netsh interfa ...