2D游戏箭头随鼠标移动实现

1.创建一个2D游戏工程
创建一个image,方便观察图片方向是否,跟随鼠标变化

2.设置Cavas属性
Render Mode 设置为Screen Space - Camera
把Main Camera拖拽赋值给Render Camera

3.把鼠标位置转换成在画布上的世界坐标
使用RectTransformUtility.ScreenPointToWorldPointInRectangle转换

API说明
public static bool ScreenPointToWorldPointInRectangle(RectTransform rect, Vector2 screenPoint, Camera cam, out Vector3 worldPoint);
第一个参数rect是画布所在的RectTransform
第二个参数screenPoint是鼠标位置,这里把它由Vector3强转成Vector2 即可,
Vector2 (Input.mousePosition)
第三个参数cam 是渲染相机,使用Main Camera,可以拖拽赋值也可以使用Camera.main
第四个参数worldPoint是输出结果
返回值为true时说明鼠标点在了画布上,返回一个转换坐标
Vector3 mousePos;
if(RectTransformUtility.ScreenPointToWorldPointInRectangle(canvasRect,new Vector2(Input.mousePosition.x,Input.mousePosition.y),Camera.main,out mousePos))
{
print(mousePos);
}
如果只要位置跟随鼠标,使用transform.position=mousePos

4.计算图片向上方向与转换坐标的夹角
dir表示图片位置与鼠标位置的连线
Vector3 dir = mousePos - transform.position;

agl表示向上方向连线的夹角
Vector3.Angle 只返回正值,并且在0-180之间
当鼠标位于图片右侧时,需要将旋转角度取负

float agl= Vector3.Angle(Vector3.up, dir)
if (mousePos.x > transform.position.x)
{
agl*= -1;
}

5.给图片设置旋转设置获取的夹角
transform.rotation = Quaternion.Euler(0, 0, agl);

代码链接:https://github.com/zecymo3/FollowMouseTest

你可能感兴趣的:(学习记录)