Unity 2D中能否实现单击选中对象并跟随光标功能?
Unity 2D 单击选中并跟随光标实现方案
可行性说明
完全可行,无需依赖Unity内置拖拽系统,通过基础的鼠标输入检测与坐标转换就能实现需求。
所需组件
不需要强制使用Rigidbody2D,除非你的对象需要和物理系统交互(比如碰撞响应、受力模拟等)。核心仅需:
Collider2D(任意2D碰撞体组件,如BoxCollider2D、CircleCollider2D):用于判定鼠标点击是否命中目标对象- 自定义C#脚本:处理点击状态切换与光标跟随逻辑
具体实现步骤
- 给目标2D对象添加
Collider2D组件,确保Is Trigger未勾选(若无需触发事件) - 创建C#脚本(例如命名为
ClickFollow.cs),挂载到目标对象上 - 编写脚本逻辑:
- 用布尔变量维护选中状态
- 检测鼠标左键单击事件,判断点击是否命中当前对象
- 切换选中状态时启动/停止跟随逻辑
- 在
Update方法中处理光标跟随
示例代码
using UnityEngine; public class ClickFollow : MonoBehaviour { private bool isSelected = false; private Camera mainCamera; void Start() { mainCamera = Camera.main; } void Update() { // 检测鼠标左键单击 if (Input.GetMouseButtonDown(0)) { // 将鼠标屏幕坐标转换为2D世界坐标 Vector2 mouseWorldPos = mainCamera.ScreenToWorldPoint(Input.mousePosition); // 射线检测点击位置是否命中当前对象 RaycastHit2D hit = Physics2D.Raycast(mouseWorldPos, Vector2.zero); if (hit.collider != null && hit.collider.gameObject == gameObject) { // 切换选中状态 isSelected = !isSelected; } else if (isSelected) { // 点击空白区域取消选中(可根据需求移除该逻辑) isSelected = false; } } // 选中状态下让对象跟随光标 if (isSelected) { Vector2 targetPos = mainCamera.ScreenToWorldPoint(Input.mousePosition); // 保持对象z轴位置不变,避免被相机遮挡 targetPos.z = transform.position.z; transform.position = targetPos; } } }
注意事项
- 确保场景内有
Main Camera,且相机Projection设置为Orthographic(2D场景默认配置) - 若多个对象需要此功能,给每个对象单独挂载该脚本即可
- 若仅允许再次点击对象取消选中,移除示例中
else if (isSelected)部分的逻辑即可
内容的提问来源于stack exchange,提问作者codingismy_passion
相关产品推荐
相关产品推荐

