UNITY UGUI随着鼠标旋转,看向鼠标旋转!

UGUI随着鼠标旋转

1,先上效果图。

2,思路0x01:让image 看向一个点,让这个看向点跟随鼠标。

点跟随鼠标代码,如下图:

    Vector2 MouseOnUIPos(Vector2 _inputPos)
    {
        Vector2 _pos = Vector2.zero;
        if (RectTransformUtility.ScreenPointToLocalPointInRectangle(UseCanves.transform as RectTransform, _inputPos, UseCanves.worldCamera,out _pos))
        {

        }
        return _pos;
    }

然后就是看向了,看向的话注意,默认是z轴看向,找了半天,找个一个方法让Y轴看向,先看向然后翻转轴:

     //鼠标跟随
        LookAtPoint.GetComponent<RectTransform>().anchoredPosition3D= MouseOnUIPos(Input.mousePosition);
        //看向
        TargetTrf.transform.LookAt(LookAtPoint.transform);
        //Y轴看向
        TargetTrf.transform.rotation *= Quaternion.Euler(0, -90, -90);

然后就发现有个问题,在过某个零界点的时候,图片会左右翻转!若不是一个对称的图形的话,看出明显的问题!(不建议用,建议在3d物体时用LOOKAT实现一些物体的旋转)

思路0x02(建议使用)

image平面上的旋转最终就是在改变Z值。计算看向点和vector3.Up的角度,然后赋值就行。唯一需要考虑的就是,Vector3.Angle返回值是0-180,赋值的时候根据左右判断正负。

  LookAtPoint.GetComponent<RectTransform>().anchoredPosition3D = MouseOnUIPos(Input.mousePosition);
        Vector3 _dis = LookAtPoint.GetComponent<RectTransform>().anchoredPosition3D -
            TargetTrf.GetComponent<RectTransform>().anchoredPosition3D;
        float rightfloat = Vector3.Angle(_dis, Vector3.right);
        float upfloat= Vector3.Angle(_dis, Vector3.up);
        if (rightfloat<90)
        {
            TargetTrf.transform.localEulerAngles = new Vector3(0, 0, -upfloat);
        }
        else
        {
            TargetTrf.transform.localEulerAngles = new Vector3(0, 0, upfloat);
        }

最后,本身听起来一个很简单的东西,但是实现起来确实费了一些时间。。。还得加强基础啊

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值