void DirectionJudge(){Vector3 dir = mousePositionInWorld - transform.position;dir.z = 0f;var magiDir = Vector3.Magnitude(dir);//取模float v = Vector3.Dot(Vector3.up, dir)/magiDir ;//点乘判断前后float h = Vector3.Cross(Vector3.forward, dir).y;//叉乘判断左右if (v >= 0.5f)_anim.SetTrigger("up"); //Debug.Log("向前");else if(v<-0.5f)_anim.SetTrigger("down");//Debug.Log("向后");}else if(h>0)_anim.SetTrigger("right");//Debug.Log("向右");}else if(h<0)//如果写else,点原地时会卡一个left的trigger进去,不行_anim.SetTrigger("left");//Debug.Log("向左");}}

主要是通过点乘和叉乘在做方向判断,鼠标点击来和物件当前位置做判断。

发现了一些值得注意的点,

mousePositionInWorld = Camera.main.ScreenToWorldPoint(Input.mousePosition);

这个方法获得的点 z值是-10,而且unity中很多运动学方法造成浮点数不精确

float step = speed* Time.deltaTime;
gameObject.transform.localPosition = Vector2.MoveTowards(gameObject.transform.localPosition, mousePositionInWorld, step);
//unity并不精确,如果用vector3 z会位移,一旦位移就在game窗口不显示。

所以在2D项目中尽可能使用二维向量,三维向量也要时刻归0,;

后面学习了一种方向配合两个参数X ,Y动画树的控制方法

 public void PlayLocomotionAnimation(Vector3 currentPos,Vector3 navPos,Vector3 targetPos){Vector3 lookDir = navPos-currentPos;if (lookDir.magnitude<=0.0001f){lookDir = targetPos - currentPos;}if (Vector3.Distance(currentPos,targetPos)>0.3f){animator.SetFloat("LookX", lookDir.normalized.x);//归一化animator.SetFloat("LookY", lookDir.normalized.y);animator.SetBool("MoveState",true);isMoving = true;}else if(Vector3.Distance(currentPos, targetPos) < 0.15f){animator.SetBool("MoveState", false);isMoving = false;}}

这种也避免了复杂运算,更好

UNITY中利用点乘和叉乘判断方向 2D相关推荐

  1. Unity中利用材质自发光实现物体闪烁效果

    Unity中利用材质自发光实现物体闪烁效果 补充:这种方法有一点问题,在测试(Windows平台)的时候发现,要想在Build出来的游戏中实现闪烁效果,就必须在 Project 窗口中将源材质的自发光 ...

  2. 小功能⭐️Unity中利用材质自发光实现物体闪烁效果

    文章目录 本文基于VDer的文章<Unity中利用材质自发光实现物体闪烁效果>延伸开发 在实现了具有一个Material的物体闪烁发光之后,延伸开发了具有多个Material的自闪烁效果, ...

  3. Unity中利用NOPI读取Excel

    Unity中利用NOPI读取Excel ---0v0--- 前言 ---0_0--- NPOI的相关.dll网盘下载链接 一.解析Excel的类 二.测试代码 -0v0- 前言 最近工作遇到解析.xl ...

  4. Unity中的点乘和叉乘

    Unity中的点乘和叉乘 点乘很多资料上都是说表示两个向量的相似度,具体是怎么表示相似度,结果大小如何表示相似度,越大越相似,还是越差,如果细细去推导才发现很多东西以前的理解是有错误或者说是不清不楚的 ...

  5. java 正则表达式 判断 日期_怎么在java中利用正则表达式对时间日期进行判断

    怎么在java中利用正则表达式对时间日期进行判断 发布时间:2020-12-08 16:18:34 来源:亿速云 阅读:105 作者:Leah 这篇文章给大家介绍怎么在java中利用正则表达式对时间日 ...

  6. Unity中 利用Line Renderer || Trail Renderer制作飘烟拖尾

    在Unity中粒子特效就可以制作飘烟拖尾,但是如果运动过快难免会有不自然的断开.虽然粒子中加入了Trail,但是我让拖尾转角圆滑比较困难(这方面还得请教特效同学).当然如果对转角没有要求,粒子还是最简 ...

  7. Unity中利用C#开发泡泡龙游戏

    泡泡龙是一款非常经典的游戏,版本有很多,如百度的<彩色泡泡>等.游戏开始时,泡泡应该出现m行:如果连续n次发射泡泡没有出现同色泡泡相消的情况,在屏幕上方自动加上一行泡泡:如果屏幕中泡泡全部 ...

  8. 【Unity Shader】Unity中利用GrabPass实现玻璃效果

    <入门精要>中模拟玻璃是用了Unity里的一个特殊的Pass来实现的,这个Pass就是GrabPass,比起上一篇博客实现镜子的方法,这个方法我认为相对复杂,因此在实现之前需要对GrabP ...

  9. unity editor android 黑屏_如何在Unity中利用nReal制作AR应用

    来源:新浪VR nReal眼镜是今年最有趣的增强现实小工具之一.它们已经在CES上展示过了,几个月前笔者在北京亲自试用过,在我的评测中,我强调了它们不仅非常轻.时尚,而且还能提供非常明亮的全息视图. ...

最新文章

  1. php升级的痛苦,升级 PHP 7.4 带来的两个大坑
  2. Apache(2)——进程与模块
  3. Java Windows注销用户,中止Windows从Java注销
  4. python元组和集合
  5. 三次握手和四次挥手图解_详解 TCP 连接的“三次握手”与“四次挥手”
  6. Java提高班(五)深入理解BIO、NIO、AIO
  7. 【跃迁之路】【722天】程序员高效学习方法论探索系列(实验阶段479-2019.2.12)...
  8. 基于Python-turtle库绘图(汇总)
  9. SSL证书 和 CA证书 区别
  10. GNS3 思科交换机配置三层转发
  11. 开源编解码项目FFmpeg迎来20周年生日 凭一己之力养活全球无数播放器!
  12. 【知识分享】汽车搭载的车载摄像头分类
  13. latex 输入下划线_
  14. 认识并行、并发、多线程
  15. Python小程序之超市买水果
  16. 小小盗号VC实现原理
  17. 事后审计 vs 事前审批
  18. Java导出word 图片重复
  19. Metasploit技术(一)——Metasploit简介与基础
  20. 数据库 约束(Constraint)、多表关系和范式

热门文章

  1. 一周cp未能连接到服务器,AppSight - 一周CP-拒接闲聊只走心
  2. 工作十年悟出的15条职场道理
  3. 支持基于角色的权限访问控制,优化UI界面,JumpServer堡垒机v2.20.0发布
  4. 滨州申请专利需要准备哪些材料?
  5. pytorch实现图像上采样的几种方式
  6. systemd-journald日志清理
  7. List根据对象中的指定元素进行排序
  8. 聚齐这三张宝图,搞懂css权重
  9. ES6 Arrow functions
  10. 一看就会,效率翻倍!在线设计必会技能(基础篇)