[Unity][UGUI]获得鼠标对应屏幕的坐标,图片跟随鼠标移动

43人阅读 评论(0) 收藏 举报
分类:


Input.mousePosition







using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test_Mouse : MonoBehaviour {

    public GameObject go;

	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
        Debug.Log("    "+Input.mousePosition);
        //go.GetComponent<RectTransform>().sizeDelta = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
        //go.GetComponent<RectTransform>().localPosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y,0);
        //Camera.main.WorldToScreenPoint(Input.mousePosition);
        go.GetComponent<RectTransform>().position = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0);
    }
}





因为

Input.mousePosition

计算的坐标,是以左下角为 原点。

所以跟随的Image图片的锚点,要设置为左下角。
并且Rect Transform的Pos X ,Pos Y,Pos Z为0,0,0


go.GetComponent<RectTransform>().position = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0);

注意这里 的Image的 位置不能是 localPosition,会产生 偏差。

正确的是position。

你会发现,是Image图片的 中点,跟随 鼠标进行移动。



----------------------------------------

go.GetComponent<RectTransform>().sizeDelta【参考文章1,2】


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test_Mouse : MonoBehaviour {

    public GameObject go;

	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
        Debug.Log("    "+Input.mousePosition);
        //go.GetComponent<RectTransform>().sizeDelta = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
        //go.GetComponent<RectTransform>().localPosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y,0);
        //Camera.main.WorldToScreenPoint(Input.mousePosition);
        go.GetComponent<RectTransform>().position = new Vector3(Input.mousePosition.x- (go.GetComponent<RectTransform>().sizeDelta.x/2),
            Input.mousePosition.y - (go.GetComponent<RectTransform>().sizeDelta.y / 2)
            , 0);
    }
}



using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test_Mouse : MonoBehaviour {

    public GameObject go;

	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
        Debug.Log("    "+Input.mousePosition);
        //go.GetComponent<RectTransform>().sizeDelta = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
        //go.GetComponent<RectTransform>().localPosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y,0);
        //Camera.main.WorldToScreenPoint(Input.mousePosition);
        go.GetComponent<RectTransform>().position = new Vector3(Input.mousePosition.x + (go.GetComponent<RectTransform>().sizeDelta.x/2),
            Input.mousePosition.y + (go.GetComponent<RectTransform>().sizeDelta.y / 2)
            , 0);
    }
}





using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test_Mouse : MonoBehaviour {

    public GameObject go;

	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
        Debug.Log("    "+Input.mousePosition);
        //go.GetComponent<RectTransform>().sizeDelta = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
        //go.GetComponent<RectTransform>().localPosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y,0);
        //Camera.main.WorldToScreenPoint(Input.mousePosition);
        go.GetComponent<RectTransform>().position = new Vector3(Input.mousePosition.x + (go.GetComponent<RectTransform>().sizeDelta.x/2),
            Input.mousePosition.y - (go.GetComponent<RectTransform>().sizeDelta.y / 2)
            , 0);
    }
}





----------------------------------------




参考文章:

1.UGUI之RectTransform知识点 图解
http://www.manew.com/thread-41633-1-1.html
(出处: -【游戏蛮牛】-ar增强现实,虚拟现实,unity3d,unity3d教程下载首选u3d,unity3d官网)

2.

ugui在运行时改变RectTransform的大小

3.


相关文章:

1.【Unity&NGUI】UI精灵跟随鼠标移动

2. 

[Unity][UGUI]Tooltip提示框

3.








查看评论

UGUI源码深度剖析

-
  • 1970年01月01日 08:00

Unity UGUI 拖拽跟随实现

IBeginDragHandler,IEndDragHandler,IDragHandler,IDropHandler 首先要实现这个四个接口。 其中OnDrag接口是用来处理图标跟随光标(手指在...
  • WangHaoDiablo
  • WangHaoDiablo
  • 2017-06-21 15:04:39
  • 1082

Unity3d-UGUI中Butten随鼠标的移动点击而移动

//玩过游戏或者电脑看电影的都知道,鼠标移动到哪个图标的时候,那个图标会缩放, 首先我们在Hierarchy面板中添加Button,然后在Inspector面板中的Button(Script)中Tr...
  • Markdon
  • Markdon
  • 2017-08-29 21:13:33
  • 464

unity 原生UI 拖拽跟随鼠标移动

unity 中拖拽某个UI移动时,例如是image类型的UI,要想实现图片跟随着鼠标移动需要以下操作: 首先我们要在鼠标按下时保存鼠标按下的位置,记录要移动物体的初始位置  if(Input.Ge...
  • tianyongheng
  • tianyongheng
  • 2015-03-25 14:40:23
  • 4839

unity中UGUI图片箭头指向鼠标位置

初学unity,公司项目中遇到的一个简单小功能,重新回顾了初高中的额数学知识,希望对同样初学者有用,demo就不上传了,工程中只用到一个图片(image),代码拖进去就能用了。 效果如图 ...
  • u012527305
  • u012527305
  • 2017-08-29 23:02:26
  • 348

unity中让一个精灵在屏幕上跟随鼠标

using UnityEngine; using System.Collections; public class follw : MonoBehaviour {     public Camera...
  • unity_http
  • unity_http
  • 2016-09-01 18:37:05
  • 1995

unity UGUI 图片随鼠标旋转

  • 2016年09月08日 15:09
  • 774B
  • 下载

Unity 鼠标拾取检测 (Mouse Raycast ) UGUi面板随鼠标指针显隐

using UnityEngine; using System.Collections; /// /// 时间:20161128 XXX /// 公司:山东XX有限公司 /// 功能介绍: ///...
  • luckydog1120446388
  • luckydog1120446388
  • 2016-11-28 11:55:35
  • 1870

Unity物体跟随鼠标的实现

这里主要实现的功能是:点击按钮,生成物体,当放开鼠标时,物体移动到固定位置(注明:采用的是NGUI插件)。 首先,要考虑到的是,按下鼠标、抬起鼠标两个事件的不同操作,所以采用的是UIEventTrig...
  • n_moling
  • n_moling
  • 2017-07-18 13:43:28
  • 1061

精灵跟随鼠标移动以及鼠标图标的显示与关闭

今天讲一点小知识,如何让某对象跟着鼠标移动呢,如何让鼠标箭头被隐藏,接下来我用代码来解释。(注意:我用的是NGUI创建的精灵,代码上定义精灵和unity自带的精灵有一丢丢区别)。spriteTest精...
  • qq_35390518
  • qq_35390518
  • 2017-04-25 15:46:11
  • 360
    作者声明
    该博客所用图片资源均作学习分享用途,请勿用于商业行为。传播者自负。
    如果本博客所写文章侵犯到您的权益,请主动联系留言,我们将及时删除相关内容。
    请支持使用正版软件,Unity正版DragonBones正版
    --------------------------------------------
    不要轻易使用 分享 的非正规的无版权授权的资源,一旦被发现,后果自负,风险自担。
    --------------------------------------------
    关于学习方法:从一个个小的测试实验,项目做起。记录分享自己的学习经验&思考,不仅有助于自己的学习总结,而且能在一定程度上帮助和自己一样步履瞒珊的初学者。
    pdf-xchange viewer,支持PDF文件,注释
    --------------------------------------------
    实践是检验真理的唯一途径。
    --------------------------------------------
    怎么样才能既不失礼貌,又能拒绝回答别人问题?
    答:回答一次500软妹币。
    --------------------------------------------
    如果想为那些原创内容作者贡献一份力量,请不要跳过广告,因为这有可能是他们唯一的收入来源。
    如果我们不帮助这些作者,当我们有一天也成为作者的时候,同样也没人会帮助我们。
    如果作者没有收入,那他们就不会更新 更好的内容 的视频。(亏本的生意没人做)
    如果您有更好的办法,请留言,谢谢。
    个人资料
    持之以恒
    等级:
    访问量: 46万+
    积分: 9463
    排名: 2420
    文章分类