void LookAtPos(Transform arrow,Vector3 pos)
{
Vector2 screenPos = Camera.main.WorldToScreenPoint(transform.position);
Debug.Log(transform.position);
Debug.Log(screenPos);
arrow.transform.LookAt(pos);
Vector2 arrowPos = Camera.main.ViewportToScreenPoint(arrow.transform.position);
Vector2 newPos = Camera.main.ViewportToScreenPoint(pos);
float dirY = newPos.y - arrowPos.y;
float dirX = newPos.x - arrowPos.x;
float arrowRotationZ = 0f;
if (dirX >= 0)
{
if (dirX == 0)
{
if (dirY > 0)
{
arrow.transform.rotation = Quaternion.Euler(0f, 0f, 360f + 90f);
}
else if (dirY < 0)
{
arrow.transform.rotation = Quaternion.Euler(0f, 0f, 360f - 90f);
}
else
{
arrow.transform.rotation = Quaternion.Euler(0f, 0f, 360f + 90f);
}
}
else
{
if (dirY > 0)
{
arrowRotationZ = Mathf.Atan2(Mathf.Abs(dirY), Mathf.Abs(dirX)) * 180f / Mathf.PI;
Debug.Log("角度值:" + arrowRotationZ);
arrow.transform.rotation = Quaternion.Euler(0f, 0f, 360f + arrowRotationZ);
}
else if (dirY < 0)
{
arrowRotationZ = Mathf.Atan2(Mathf.Abs(dirY), Mathf.Abs(dirX)) * 180f / Mathf.PI;
arrow.transform.rotation = Quaternion.Euler(0f, 0f, 360f - arrowRotationZ);
}
else
{
arrow.transform.rotation = Quaternion.Euler(0f, 0f, 360f);
}
}
}
else
{
if (dirY > 0)
{
arrowRotationZ = Mathf.Atan2(Mathf.Abs(dirY), Mathf.Abs(dirX)) * 180f / Mathf.PI;
arrow.transform.rotation = Quaternion.Euler(0f, 0f, 360f + 180f - arrowRotationZ);
}
else if (dirY < 0)
{
arrowRotationZ = Mathf.Atan2(Mathf.Abs(dirY), Mathf.Abs(dirX)) * 180f / Mathf.PI;
arrow.transform.rotation = Quaternion.Euler(0f, 0f, 360f + 180f + arrowRotationZ);
}
else
{
arrow.transform.rotation = Quaternion.Euler(0f, 0f, 360f + 180f);
}
}
}
unity 箭头看向某个点
最新推荐文章于 2024-05-27 09:14:12 发布
此篇博客介绍了如何在Unity中使用Transform.LookAt()函数,根据给定位置调整3D箭头的方向,并通过屏幕坐标计算旋转角度以实现精确指向。作者详细展示了如何处理不同方向的输入并更新箭头的朝向。
摘要由CSDN通过智能技术生成