unity中 UI物体跟随鼠标移动,根据鼠标滑动方向改变物体方向在X轴。 移动端同样实现

using UnityEngine;

public class FollowMouseHorizontal : MonoBehaviour
{
    private RectTransform rectTransform;
    private Vector2 lastPosition;
    public float speed = 5.0f;

    void Start()
    {
        rectTransform = GetComponent<RectTransform>();
        lastPosition = rectTransform.anchoredPosition;
    }

    void Update()
    {
#if UNITY_EDITOR || UNITY_STANDALONE
        HandleMouseInput();
#elif UNITY_IOS || UNITY_ANDROID
        HandleTouchInput();
#endif
    }

    void HandleMouseInput()
    {
        Vector2 currentMousePosition = Input.mousePosition;
        Debug.Log(Input.mousePosition);
        MoveTowards(new Vector2(currentMousePosition.x, rectTransform.position.y));
    }

    void HandleTouchInput()
    {
        if (Input.touchCount > 0)
        {
            Touch touch = Input.GetTouch(0);
            Vector2 currentTouchPosition = touch.position;
            MoveTowards(new Vector2(currentTouchPosition.x, rectTransform.position.y));
        }
    }

    void MoveTowards(Vector2 targetPosition)
    {
        Vector2 direction = targetPosition - (Vector2)rectTransform.position;

        // 平滑移动
        rectTransform.position = Vector2.Lerp(rectTransform.position, targetPosition, Time.deltaTime * speed);

        // 改变UI物体的左右方向
        if (direction.x > 0)
        {
            rectTransform.localScale = new Vector3(1, 1, 1); // 面向右
        }
        else if (direction.x < 0)
        {
            rectTransform.localScale = new Vector3(-1, 1, 1); // 面向左
        }
    }
}
 

Canvas 的 Render Mode 是Screen Space - Camera:

using UnityEngine;

public class FollowMouseHorizontalCmaera : MonoBehaviour
{
    private RectTransform rectTransform;
    public Camera uiCamera;
    public float speed = 5.0f;

    void Start()
    {
        rectTransform = GetComponent<RectTransform>();
    }

    void Update()
    {
#if UNITY_EDITOR || UNITY_STANDALONE
        HandleMouseInput();
#elif UNITY_IOS || UNITY_ANDROID
        HandleTouchInput();
#endif
    }

    void HandleMouseInput()
    {
        Vector3 currentMousePosition = Input.mousePosition;
        currentMousePosition.z = uiCamera.nearClipPlane; // 设置 z 值为相机的近剪切面

        Vector3 worldMousePosition = uiCamera.ScreenToWorldPoint(currentMousePosition);
        MoveTowards(new Vector2(worldMousePosition.x, rectTransform.position.y));
    }

    void HandleTouchInput()
    {
        if (Input.touchCount > 0)
        {
            Touch touch = Input.GetTouch(0);
            Vector3 currentTouchPosition = touch.position;
            currentTouchPosition.z = uiCamera.nearClipPlane; // 设置 z 值为相机的近剪切面

            Vector3 worldTouchPosition = uiCamera.ScreenToWorldPoint(currentTouchPosition);
            MoveTowards(new Vector2(worldTouchPosition.x, rectTransform.position.y));
        }
    }

    void MoveTowards(Vector2 targetPosition)
    {
        Vector2 direction = targetPosition - (Vector2)rectTransform.position;

        // 平滑移动
        rectTransform.position = Vector2.Lerp(rectTransform.position, targetPosition, Time.deltaTime * speed);

        // 改变UI物体的左右方向
        if (direction.x > 0)
        {
            rectTransform.localScale = new Vector3(1, 1, 1); // 面向右
        }
        else if (direction.x < 0)
        {
            rectTransform.localScale = new Vector3(-1, 1, 1); // 面向左
        }
    }
}
 

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值