Unity中鼠标拖动物体移动的算法

Wesley13
• 阅读 598

鼠标拖动物移动在游戏设计上用的非常多,像飞机射击游戏,我来分享下我的思路:

   我的思路: 因为鼠标的屏幕坐标是二维的,物体是世界坐标,三维的。首先将鼠标的屏幕坐标转换为三维的世界坐标,这样为了计算鼠标与物体位置之间的距离,再将移动后的鼠标的屏幕坐标转换为世界坐标,加上之前的距离量,将和值赋给物体坐标,就可以实现了。

C#算法实现:

IEnumerator OnMouseDown()
    {
        //将物体由世界坐标系转换为屏幕坐标系
        Vector3 screenSpace = Camera.main.WorldToScreenPoint(transform.position);
        //三维物体坐标转屏幕坐标
        //鼠标的坐标系是2维,需要转换成3维的世界坐标系 
         //只有3维坐标情况下才能来计算鼠标位置与物理的距离,offset即是距离
        //将鼠标屏幕坐标转为三维坐标,再算出物体位置与鼠标之间的距离
        Vector3 offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x,Input.mousePosition.y,screenSpace.z));
      while(Input.GetMouseButton(0))
      {
          //得到现在鼠标的2维坐标系位置
          Vector3 curScreenSpace = new Vector3(Input.mousePosition.x,Input.mousePosition.y,screenSpace.z);
          //将当前鼠标的2维位置转换成3维位置,再加上鼠标的移动量
          Vector3 curposition = Camera.main.ScreenToWorldPoint(curScreenSpace) + offset;
          //curPosition就是物体应该的移动向量赋给transform的position属性
          transform.position = curposition;
          yield return new WaitForFixedUpdate();//循环执行,等到固定帧更新
      }
    }

点赞
收藏
评论区
推荐文章
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
SFML从入门到放弃(3) 视角和碰撞检测
SFML从入门到放弃(3)视角和碰撞检测视角window.draw();所画出的对象是在世界坐标的绝对位置。视角可以选定在窗口中显示世界坐标下的的哪一个区域。sf::Viewinit_view(){sf::Viewvi(sf::Vector2f(0,0),sf
Easter79 Easter79
3年前
Three.js 地理坐标和三维空间坐标的转换
奇技指南本文作者高峰,360奇舞团前端工程师,W3C性能工作组/WOT工作组成员本文转载自奇舞周刊引言在实现3D地球时,球面是通过地理贴图渲染的。所以我们所说的地理坐标和三维空间坐标的转换,是指将地理贴图上的坐标,转换为球面坐标(https://en.wikipedia.org/wiki/Spherical\_coor
Wesley13 Wesley13
3年前
Unity3d Transform.forward和Vector3.forward的区别!
在Unity中有两个forward,一个是Transform.forward一个是Vector3.forward。对于Vector3来说,它只是缩写。没有其它任何含义。Vector3.forward,(0,0,1)的缩写。//在transform.Translate()中使用时,如果不表明坐标系,则为物体的局部坐标,即物体自身的正前方。
Wesley13 Wesley13
3年前
Unity Inspector添加自定义按钮(Button)
     在Unity开发游戏的时候,为了有一个更快更方便的工作流,我们往往会在Editor下开发一些方便实用的工具。在工具中,用到最多,最关键的就是按钮,它是工具的首席执行官。下面就用最简单的代码来演示添加一个自定义按钮到Inspector当中。        案例:指定坐标后克隆新物体到场景。   1、 在UnityAssets下
Wesley13 Wesley13
3年前
unity 赛车相机跟随物体移动
对于unity赛车相机跟随物体移动(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.taikr.com%2Farticle%2F520)的问题,我之前做了一个人物的相机跟随着物体移动,所以就把这个来分享出来,两个的原理基本是一样的,所以大家可以参考下。今天做了一个人物点击鼠标
Stella981 Stella981
3年前
OpenLayer4加载svg
关于加载svg的代码,网上是少之又少,牛老师博客倒是有,但是只是核心代码,并没有给出完整的demo,而且核心代码中有个问题对于这个ol渲染不太理解的话的话应该做不出来效果,就是关于坐标转屏幕坐标的问题,必须需要地图渲染完成之后才能拿到否则没法转换,得出转换为空的结果。放个图:!(https://oscimg.oschina.net/oscnet
Stella981 Stella981
3年前
OpenGL选择与拾取GL_SELECT 附源码
【一个提示】该方法虽然可行但是已经淘汰很多年,建议自行尝试,后面也许会写论文最好的方式是:1\.使用Kdtree组织场景中的物体,以便于快速查找。2\.使用屏幕坐标空间三维坐标的逆矩阵变换,实现选取。在介绍开始,首先给出工程和可执行程序的下载链接:     OpenGL选择和拾取obj模型\_代码及
绣鸾 绣鸾
1年前
BetterMouse for Mac鼠标增强软件
是Mac电脑上一款优秀的鼠标增强工具,它可以帮助用户提高鼠标的使用效率,具有以下特点:1.定制鼠标手势:BetterMouse支持定制鼠标手势,用户可以通过手势来实现不同的操作,比如前进、后退、刷新等。2.智能鼠标滚轮:BetterMouse可以智能调整鼠
绣鸾 绣鸾
1年前
BetterMouse for Mac(鼠标增强软件)
是Mac电脑上一款优秀的鼠标增强工具,它可以帮助用户提高鼠标的使用效率,具有以下特点:1.定制鼠标手势:BetterMouse支持定制鼠标手势,用户可以通过手势来实现不同的操作,比如前进、后退、刷新等。2.智能鼠标滚轮:BetterMouse可以智能调整鼠