初学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);
}
}
}
}