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); // 面向左

}

}

}

相关推荐
Oiiouui1 小时前
Godot(4.x): Python处理转换Excel为注入Json
游戏引擎·godot
追光者♂3 小时前
【测评系列3】CSDN AI数字营销实测体验官:测试 开源项目——Superpowers 游戏引擎从零开发实战指南
人工智能·深度学习·机器学习·typescript·开源·游戏引擎·superpowers
小拉达不是臭老鼠4 小时前
Unity数据持久化_Json
学习·unity
heimeiyingwang4 小时前
【架构实战】订单系统架构设计:电商核心系统的演进
unity·架构·系统架构
UnicornDev4 小时前
【Flutter x HarmonyOS 6】设置页面的UI设计
flutter·ui·华为·harmonyos·鸿蒙
元气少女小圆丶4 小时前
SenseGlove Nova 2+Unity开发笔记3
笔记·unity·游戏引擎
Oiiouui4 小时前
Godot(4.x): 游戏管理器: Excel 动态依赖注入实现
游戏·游戏引擎·godot
ZC跨境爬虫4 小时前
跟着 MDN 学CSS day_31:(精通链接样式,从伪类到导航菜单)
前端·javascript·css·ui·交互
WMX10124 小时前
Unity-shader学习记录
学习·unity·游戏引擎
WMX10124 小时前
Hololens 2 上部署 Unity+MRTK 项目_模型着色
unity·游戏引擎·hololens