Unity2D中使用鼠标拖动物体移动

原创 2015年11月20日 16:50:07

昨天用unity开发了一个微信的飞机大战,效果图如下。期间遇到了很多问题都一一解决了,印象最深的问题就是如何用鼠标拖动飞机的移动。今天我就把我的方法拿出来分享。


我的方法是在飞机物体中写一个脚本。在Update中先检测鼠标是否按下。

代码是这样的:

private bool isMouseDown = false;

	void Update () {
	    if (Input.GetMouseButtonDown(0))
	    {
	        isMouseDown = true;
	    }
	    if (Input.GetMouseButtonUp(0))
	    {
	        isMouseDown = false;
	    }
	}
如果isMouseDown = true说明鼠标已经安装,那么接下来我们就可以判断位置了。


接下来如果要移动物体,就必须知道物体与鼠标的偏移量(offset)和上一次鼠标释放时的位置(lastMousePosition)。最后物体的实际位置就是offset+lastMousePosition。

所以代码是这样的:

private bool isMouseDown = false;
    private Vector3 lastMousePosition = Vector3.zero;

	void Update () {
	    if (Input.GetMouseButtonDown(0))
	    {
	        isMouseDown = true;
	    }
	    if (Input.GetMouseButtonUp(0))
	    {
	        isMouseDown = false;
	    }
	    if (isMouseDown)
	    {
	        if (lastMousePosition != Vector3.zero)
	        {
	            Vector3 offset = Camera.main.ScreenToWorldPoint(Input.mousePosition) - lastMousePosition;
	            this.transform.position += offset;
	        }
            lastMousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
	        
	    }
	}

运行游戏,我们已经可以看到飞机可以随鼠标移动了,但是出现了另一个问题:飞机出现了瞬移。

这是因为lastMousePosition在鼠标释放时没有清零,所以我们应该在鼠标释放的地方加上lastMousePosition = Vector3.zero;


所以最终代码是这样的:

private bool isMouseDown = false;
    private Vector3 lastMousePosition = Vector3.zero;

	void Update () {
	    if (Input.GetMouseButtonDown(0))
	    {
	        isMouseDown = true;
	    }
	    if (Input.GetMouseButtonUp(0))
	    {
	        isMouseDown = false;
	        lastMousePosition = Vector3.zero;
	    }
	    if (isMouseDown)
	    {
	        if (lastMousePosition != Vector3.zero)
	        {
	            Vector3 offset = Camera.main.ScreenToWorldPoint(Input.mousePosition) - lastMousePosition;
	            this.transform.position += offset;
	        }
            lastMousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
	        
	    }
	}

在这里并没有效果图,如果需要看效果就需要自己敲敲代码试试啦

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

[unity3d]2D游戏中鼠标拖动rigidbody2d

新买了台MBP,离开电源线用电脑的感觉真不错嘿 ==========================...
  • zcfan
  • zcfan
  • 2014年06月15日 17:30
  • 1736

Unity中鼠标左键按下,拖拽物体移动

把这段脚本拖给想要拖拽的物体,然后加上碰撞盒就可以了。   private Vector3 _vec3TargetScreenSpace;// 目标物体的屏幕空间坐标 private V...

unity中手指选中物体拖动旋转

小Demo测试~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 如上图,运行游戏时,点击cube物体,左右拖动进行旋转。在cube上使用脚本...

Unity UGUI 实现简单拖拽功能

这一篇博客我们来使用 UGUI 实现图片的拖拽功能。 说到拖拽,那必然离不开坐标,UGUI 的坐标有点不一样,它有两种坐标,一种是屏幕坐标,还有一种就是 UI 在Canvas内的坐标(暂时叫做ugu...

关于2D游戏拖拽处理方式

今天是我写的第一篇文章,希望在刚刚踏入游戏生活过程中,我可以不断的学习,不断的总结,提升自己的能力,早日可以独当一面。需要几年之后,回头看看,许多的问题,可以迎刃而解。      2D游戏的拖拽事件...

Unity3D之Easytouch控件控制主角移动

开发步骤: 1.导入Charactor Controller资源包; 2.导入Easy Touch 3.1.0的资源包; 3.创建一个人物模型; 4.新建一个Plane作为地板。 5.新建一...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

unity3D中使用鼠标控制物体移动的方法

using UnityEngine; using System.Collections; public class Target : MonoBehaviour { public Trans...

Unity3D中鼠标拖拽物体

using System.Collections; using UnityEngine; public class MoveMouse : MonoBehaviour {     //下面的函...

unity3D C#脚本实现鼠标拖动物体

using System.Collections; public class clickmove : MonoBehaviour { // Use this for initializa...
  • tc1hen
  • tc1hen
  • 2013年01月02日 20:26
  • 22363
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Unity2D中使用鼠标拖动物体移动
举报原因:
原因补充:

(最多只允许输入30个字)