NGUI 关于大背景用鼠标点击移动问题
2017-03-01 15:51
302 查看
接触NGUI 的时日还不是很多,最近在一个2d游戏中遇到了一个摄像机的移动问题,纠结了好久,不过最终还是找到了解决方法。
需求是在一个大背景地图上,需要鼠标点击或触摸(手机版)背景地图拖动摄像机移动。如果是3d的话,可以用射线去检测,而NGUI是不支持2d射线检测了。在背景地图上,如果存在其他UI界面,如何控制鼠标点击的物体是背景这就是主要的问题。楼主找了好久,终于找到一个方法可以实现。下面是代码
float speed = 0.5f;
Vector2 start, stop;
Vector2 step;//鼠标点击移动的向量
private Vector3 Velocity = Vector3.zero;
Vector2 pstart, pstop, pstep;
float border_y, border_x;//摄像机的边界值
int curStep, maxStep;
Transform common;
public GameObject backGround;
public GameObject panelPlant;
Vector2 startPosition, stopPosition;//鼠标点击开始和结束时的位置
Vector2 neoPosition;
// Use this for initialization
void Start()
{
startPosition = Input.mousePosition;
stopPosition = Input.mousePosition;
neoPosition = new Vector2(-1, -1);
border_x =60;
border_y = 120f;
curStep = 0;
maxStep = 0;
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButton(0) && UICamera.hoveredObject != null && UICamera.hoveredObject.name == "BackGround")
{
stopPosition = Input.mousePosition;
if (startPosition.x < 0) { startPosition = stopPosition; return; }
step = startPosition - stopPosition;
startPosition = stopPosition;
if (step.x < 2 && step.y < 2 && step.x > -2 && step.y > -2) return;//avoid move when click
step *= 1.3f;
transform.localPosition = new Vector2(transform.localPosition.x + step.x, transform.localPosition.y + step.y);
if (transform.localPosition.x < -border_x)
{
transform.localPosition = new Vector2(-border_x, transform.localPosition.y);
}
if (transform.localPosition.x > border_x)
{
transform.localPosition = new Vector2(border_x, transform.localPosition.y);
}
if (transform.localPosition.y < -border_y)
{
transform.localPosition = new Vector2(transform.localPosition.x, -border_y);
}
if (transform.localPosition.y > border_y)
{
transform.localPosition = new Vector2(transform.localPosition.x, border_y);
}
}
else if (startPosition.x >= 0) { startPosition = neoPosition; }
}
UICamera.hoveredObject 这个方法的意思就是,它会检测到由UICamera发出的射线所碰触的最后一个UI。(当然别忘了加collider。。。。)。这样就大功告成,只有当鼠标点击背景是,才会移动。这个方法的脚本挂在摄像机上就OK了。
需求是在一个大背景地图上,需要鼠标点击或触摸(手机版)背景地图拖动摄像机移动。如果是3d的话,可以用射线去检测,而NGUI是不支持2d射线检测了。在背景地图上,如果存在其他UI界面,如何控制鼠标点击的物体是背景这就是主要的问题。楼主找了好久,终于找到一个方法可以实现。下面是代码
float speed = 0.5f;
Vector2 start, stop;
Vector2 step;//鼠标点击移动的向量
private Vector3 Velocity = Vector3.zero;
Vector2 pstart, pstop, pstep;
float border_y, border_x;//摄像机的边界值
int curStep, maxStep;
Transform common;
public GameObject backGround;
public GameObject panelPlant;
Vector2 startPosition, stopPosition;//鼠标点击开始和结束时的位置
Vector2 neoPosition;
// Use this for initialization
void Start()
{
startPosition = Input.mousePosition;
stopPosition = Input.mousePosition;
neoPosition = new Vector2(-1, -1);
border_x =60;
border_y = 120f;
curStep = 0;
maxStep = 0;
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButton(0) && UICamera.hoveredObject != null && UICamera.hoveredObject.name == "BackGround")
{
stopPosition = Input.mousePosition;
if (startPosition.x < 0) { startPosition = stopPosition; return; }
step = startPosition - stopPosition;
startPosition = stopPosition;
if (step.x < 2 && step.y < 2 && step.x > -2 && step.y > -2) return;//avoid move when click
step *= 1.3f;
transform.localPosition = new Vector2(transform.localPosition.x + step.x, transform.localPosition.y + step.y);
if (transform.localPosition.x < -border_x)
{
transform.localPosition = new Vector2(-border_x, transform.localPosition.y);
}
if (transform.localPosition.x > border_x)
{
transform.localPosition = new Vector2(border_x, transform.localPosition.y);
}
if (transform.localPosition.y < -border_y)
{
transform.localPosition = new Vector2(transform.localPosition.x, -border_y);
}
if (transform.localPosition.y > border_y)
{
transform.localPosition = new Vector2(transform.localPosition.x, border_y);
}
}
else if (startPosition.x >= 0) { startPosition = neoPosition; }
}
UICamera.hoveredObject 这个方法的意思就是,它会检测到由UICamera发出的射线所碰触的最后一个UI。(当然别忘了加collider。。。。)。这样就大功告成,只有当鼠标点击背景是,才会移动。这个方法的脚本挂在摄像机上就OK了。
相关文章推荐
- 关于js拖拽功能,拖拽元素的position:fixed;left:0;right:0;样式引起左右拖动元素会出现落后鼠标移动距离的问题
- 关于获取鼠标点击的位置的问题
- 页面上的可鼠标移动内嵌页面层,并有关闭按钮,背景不可点击
- winform FormBordStyle=none 及 wpf FormBordStyle=none 的鼠标点击移动问题
- zf-关于荆州首页鼠标移动到导航栏上去触发的js 显示 问题解决办法
- 关于boostrap中模态框的问题点击后面背景模态框消失的问题
- 关于鼠标移动事件晃动问题解决方案
- u3d关于鼠标点击地面上的一点,物体就移动到这一点的效果
- 关于JQuery easyui中numberbox鼠标点击事件问题
- 关于在Android中如何点击GridView或者ListView中item子项达到修改子项背景的问题解决方案
- 关于uCGUI的鼠标移动时留下印子的问题
- 关于在eclipse开发web时鼠标移动到图片上显示文字问题
- unity3D 实现NGUI物体朝鼠标点击位置移动
- Ubuntu 鼠标可以移动不能点击的问题
- NGUI 点击屏幕时在该点创建图片并跟随鼠标移动
- 关于winfrom鼠标滑动,点击滚动条时Listview闪屏问题
- 关于鼠标移到gridview行上,背景变色的问题。
- 关于移动上网的通信问题,请老大们指教!
- 鼠标移动距离点击次数及键盘敲击次数每日统计帖(看看老板是怎么剥削我们的手指),每日更新
- 关于禁止USB移动设备,而不禁止USB打印机(扫描仪、鼠标等)