您的位置:首页 > 移动开发 > Unity3D

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

2017-08-29 23:02 344 查看
初学unity,公司项目中遇到的一个简单小功能,重新回顾了初高中的额数学知识,希望对同样初学者有用

,demo就不上传了,工程中只用到一个图片(image),代码拖进去就能用了。

效果如图

using UnityEngine;

using System.Collections;

using UnityEngine.UI;

public class PlayerControl : MonoBehaviour {

    public Image _jianTou;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {

        WorldToScreenPos();
}

    void WorldToScreenPos()

    {

        Vector2 screenPos = Camera.main.WorldToScreenPoint(transform.position);

        Debug.Log(transform.position);

        Debug.Log(screenPos);

        //Debug.Log("箭头屏幕坐标:"+_jianTou.transform.position);

       // Debug.Log("鼠标屏幕坐标:" + Input.mousePosition);

        _jianTou.transform.LookAt(Input.mousePosition);

        Vector2 jianTouPos = Camera.main.ViewportToScreenPoint(_jianTou.transform.position);

        Vector2 mousePos = Camera.main.ViewportToScreenPoint(Input.mousePosition);

        float xiangJianY = mousePos.y - jianTouPos.y;

        float xiangJianX = mousePos.x - jianTouPos.x;

        float jianTouRotationZ = 0f;

        if (xiangJianX >= 0)

        {           

            if (xiangJianX == 0)

            {

                if (xiangJianY > 0)

                {

                    _jianTou.transform.rotation = Quaternion.Euler(0f, 0f, 360f + 90f);

                }

                else if (xiangJianY < 0)

                {

                    _jianTou.transform.rotation = Quaternion.Euler(0f, 0f, 360f - 90f);

                }

                else

                {

                    _jianTou.transform.rotation = Quaternion.Euler(0f, 0f, 360f + 90f);

                }

            }

            else

            {       

                if (xiangJianY > 0)

                {

                    jianTouRotationZ = Mathf.Atan2(Mathf.Abs(xiangJianY),Mathf.Abs(xiangJianX))*180f/Mathf.PI;

                    Debug.Log("角度值:" + jianTouRotationZ);

                    _jianTou.transform.rotation = Quaternion.Euler(0f, 0f, 360f + jianTouRotationZ);

                }

                else if (xiangJianY < 0)

                {

                    jianTouRotationZ = Mathf.Atan2(Mathf.Abs(xiangJianY), Mathf.Abs(xiangJianX)) * 180f / Mathf.PI;

                    _jianTou.transform.rotation = Quaternion.Euler(0f, 0f, 360f - jianTouRotationZ);

                }

                else

                {

                    _jianTou.transform.rotation = Quaternion.Euler(0f, 0f, 360f);

                }

            }

        }

        else

        {

            if (xiangJianY > 0)

            {

                jianTouRotationZ = Mathf.Atan2(Mathf.Abs(xiangJianY), Mathf.Abs(xiangJianX)) * 180f / Mathf.PI;

                _jianTou.transform.rotation = Quaternion.Euler(0f, 0f, 360f + 180f - jianTouRotationZ);

            }

            else if (xiangJianY < 0)

            {

                jianTouRotationZ = Mathf.Atan2(Mathf.Abs(xiangJianY), Mathf.Abs(xiangJianX)) * 180f / Mathf.PI;

                _jianTou.transform.rotation = Quaternion.Euler(0f, 0f, 360f + 180f + jianTouRotationZ);

            }

            else

            {

                _jianTou.transform.rotation = Quaternion.Euler(0f, 0f, 360f+180f);

            }

        }

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: