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);
	        
	    }
	}

在这里并没有效果图,如果需要看效果就需要自己敲敲代码试试啦
版权声明:本文为博主原创文章,未经博主允许不得转载。

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

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

Unity UGUI 实现简单拖拽功能

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

Unity3D控制物体移动

在游戏开发中,游戏物体的移动是最基本的,如果连物体都移动不起来,那就不用说玩游戏了。 下面记录了自己在开发中实现的物体移动,不同项目可能有不同的物体移动实现,也有很多种不同的物体移动实现,文章会持续更...
  • Gary_888
  • Gary_888
  • 2016年05月23日 11:49
  • 11843

unity让物体移动到鼠标点击点

using UnityEngine; using System.Collections; public class test : MonoBehaviour { //在场景中鼠标点击地面后,...
  • zhaokuo_123456
  • zhaokuo_123456
  • 2017年01月06日 16:53
  • 1384

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

把这段脚本拖给想要拖拽的物体,然后加上碰撞盒就可以了。   private Vector3 _vec3TargetScreenSpace;// 目标物体的屏幕空间坐标 private V...
  • Haohan_Meng
  • Haohan_Meng
  • 2014年01月20日 14:23
  • 38236

Unity3D中拖动物体移动脚本

  • 2013年10月11日 19:25
  • 889B
  • 下载

unity 2d 四大坐标系问题 鼠标点击位置问题 详细入门解析

unity2d中的camera有四大坐标系你需要了解清楚,本文还介绍了如何获取鼠标位置/如何实现点击哪里就在哪里生成一个新物体/获取点击位置/点击位置转换,代码解释详尽,可以提问,入门级文章。...
  • yanzhanyi
  • yanzhanyi
  • 2014年07月28日 20:25
  • 7708

Unity 4.3 制作一个2D横版射击游戏

这是一个横版射击游戏。教程来自:http://pixelnest.io/tutorials/2d-game-unity/ 中文版教程:http://www.litpo.com/category/易学的...
  • akof1314
  • akof1314
  • 2014年04月09日 12:47
  • 60101

unity背包系统中物体拖拽效果实现(初学者)

一般背包系统中,物品是依附在格子里面,即物品为格子的子物体。物品拖拽时主要是将物品拿出,跟随鼠标移动,判断落点位置完成拖拽:如果鼠标释放终点位置下检测到的是空格子,就把物体放在空格子下;如果鼠标释放终...
  • u012761191
  • u012761191
  • 2016年09月05日 11:30
  • 3990

unity3D学习【功能实现】之九:鼠标拖动图片

点击查看动态图 这个好像只能用在ugui下,也就是说用在Canvas下的所有对象。 一,首先是将Cancas的Render mode设置为World Space,另外的模式最后我会提一下。 不管哪个模...
  • vipzjh
  • vipzjh
  • 2016年08月15日 15:14
  • 344
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Unity2D中使用鼠标拖动物体移动
举报原因:
原因补充:

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