这里记录两种方式设置物体随鼠标移动方式,主要是记录之间的区别
一、两种实现方式
1、直接将鼠标位置赋值给UI对象
public void Update()
{
gameObject.transform.position = Input.mousePosition;
}
2、将鼠标位置转换到二维Canvas下的坐标,然后设置UI的localPostion;
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour
{
private RectTransform canvasRect;
private void Start()
{
canvasRect = GameObject.Find("Canvas").GetComponent<Canvas>().transform as RectTransform;
}
public void Update()
{
Vector2 position;
RectTransformUtility.ScreenPointToLocalPointInRectangle(canvasRect, Input.mousePosition, null, out position);
transform.localPosition = position;
}
}
二、实现方式的相同点
运行查看UI的RecTransform变化值,两种效果是一样的
三、实现方式的区别
1、第一种方式是直接将对象的位置设置为鼠标的屏幕坐标,这种方式可能会导致对象的位置超出屏幕或画布边界,尤其是在使用Canvas进行UI布局时。
2、第二种方式是先将鼠标屏幕坐标转换为相对于CancasRect的局部坐标,然后将 对象的位置设置为这个局部坐标。这种方式有利于边界检查和适应不同分辨率情况。
通过将屏幕坐标转为局部坐标,可以更容易地进行边界检查和调整,确保对象不会超出Canvas边界;
这种是基于Canvas的设置对象位置,不同分辨率的屏幕下可以更好地适应调整。