Unity3D通过鼠标点击拖动获取屏幕范围
来源:互联网 发布:html5特效程序员 编辑:程序博客网 时间:2024/05/16 10:08
作为一个新人,我也来发表一篇文章,大早上的通过unity3d来给大家分享一下我自己做的小demo;
首先获取鼠标在屏幕上点击的那个点的坐标,在这里要用到input类中的MouseButtonDown()这个方法来获得鼠标的左键,右键已经滚轮的点击反应。
今天我们就用左键吧,在MouseButtonDown()这个方法里,使用参数0来表示按下左键,;使用MouseButtonUp(0)方法来表示释放左键,因为在屏幕
中是要拖动的,所以需要持续按下鼠标的函数GetMouseButton(0);这三个函数我们都放在Update里面执行;
在这里我们使用unity自带的画图类库来对鼠标点击并且拖动形成的范围进行画图,我们使用类GL中的一些方法,如PushMatrix()、LoadPixelMatrix(),以及开始画图的点和结束画图的点的函数,在这里就不一一介绍啦,待会直接上传代码就好了。
当鼠标点击拖动,形成的区域肯定是矩形,所以这边涉及上下左右边框的计算,我们使用一个材质来表示,
最后,当鼠标左键施放之后,所形成的区域就在屏幕中释放,我们使用GL中的PopMatrix()函数来表示结束;
下面是我这个demo的源代码,给大家分享一下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GetRange : MonoBehaviour {
private Vector2 mouseStartPos, mouseEndPos;
private bool mBDrawMouseRect;
public Material rectMat;//画线的材质
void Start()
{
mBDrawMouseRect = false;
}
void Update()
{
if (Input.GetMouseButtonDown(0))
//按下鼠标左键
{
Vector3 mousePosition = Input.mousePosition;
mouseStartPos = new Vector2(mousePosition.x, mousePosition.y);
}
if (Input.GetMouseButton(0))
//持续按下鼠标左键
{
mBDrawMouseRect = true;
Vector3 mousePosition = Input.mousePosition;
mouseEndPos = new Vector2(mousePosition.x, mousePosition.y);
}
if (Input.GetMouseButtonUp(0))
{
mBDrawMouseRect = false;
}
}
void OnGUI()
{
if (mBDrawMouseRect)
Draw(mouseStartPos, mouseEndPos);
GUILayout.Label("X:"+Input.mousePosition.x);
GUILayout.Label("Y:" + Input.mousePosition.y);
}
//渲染2D框
void Draw(Vector2 start, Vector2 end)
{
rectMat.SetPass(0);
GL.PushMatrix();//保存摄像机变换矩阵
Color clr = Color.green;
clr.a = 0.1f;
GL.LoadPixelMatrix();//设置用屏幕坐标绘图
//透明框
GL.Begin(GL.QUADS);
GL.Color(clr);
GL.Vertex3(start.x, start.y, 0);
GL.Vertex3(end.x, start.y, 0);
GL.Vertex3(end.x, end.y, 0);
GL.Vertex3(start.x, end.y, 0);
GL.End();
//线
//上
GL.Begin(GL.LINES);
GL.Color(Color.green);
GL.Vertex3(start.x, start.y, 0);
GL.Vertex3(end.x, start.y, 0);
GL.End();
//下
GL.Begin(GL.LINES);
GL.Color(Color.green);
GL.Vertex3(start.x, end.y, 0);
GL.Vertex3(end.x, end.y, 0);
GL.End();
//左
GL.Begin(GL.LINES);
GL.Color(Color.green);
GL.Vertex3(start.x, start.y, 0);
GL.Vertex3(start.x, end.y, 0);
GL.End();
//右
GL.Begin(GL.LINES);
GL.Color(Color.green);
GL.Vertex3(end.x, start.y, 0);
GL.Vertex3(end.x, end.y, 0);
GL.End();
GL.PopMatrix();//还原
}
}
- Unity3D通过鼠标点击拖动获取屏幕范围
- unity3D 鼠标点击拖动画线(平面)
- unity3D鼠标点击获取地面坐标
- unity3d鼠标点击,获取世界坐标
- unity3d鼠标点击,获取世界坐标
- Unity3d鼠标点击屏幕来控制人物的走动
- Cocos2dx学习之-----关于拖动缓冲,点击屏幕获取方向
- javascript 鼠标拖动层。限制拖动范围
- Unity3d通过射线来实现点击地面,获取点击坐标
- Unity3d 拖动鼠标旋转模型
- VC 获取鼠标 点击时的屏幕坐标
- 鼠标点击按钮拖动窗体
- Unity3D 鼠标拖动和旋转物体以及鼠标拖动图片
- 工具——通过鼠标点击获取图像坐标
- 通过获取鼠标的点击位置来动态定位元素
- 鼠标拖动添加指北针,鼠标拖动的范围为指北针的范围
- unity3D C#脚本实现鼠标拖动物体
- unity3d用鼠标拖动物体的代码
- iOS设计模式——观察者模式
- 第16周项目4-英文单词的基数排序
- ViewDragHelper自定义view保存view的位置
- 第十六周项目1-(5)直接选择排序(6)堆排序
- 在windows下搭建pixhawk的开发环境
- Unity3D通过鼠标点击拖动获取屏幕范围
- 什么是svn,以及svn的简单教程
- 关于okhttp的取值问题
- 第十五周项目2-用哈希法组织关键字
- float类型数据在内存中的存储
- 使用Spydroid(libstreaming)作为rtsp server
- lintcode二叉树的所有路径
- 第十六周项目5—堆排序
- QT笔记:数据库总结(一)