在鼠标拖动时旋转和移动 2D 对象
Posted
技术标签:
【中文标题】在鼠标拖动时旋转和移动 2D 对象【英文标题】:Rotating and moving 2D-objects on mouse drag 【发布时间】:2021-08-08 11:44:21 【问题描述】:我想重新创建一个游戏(七巧板),您可以在其中旋转和移动棋子。 游戏可以在这个网站上找到:https://de.mathigon.org/tangram
我找到了用于旋转和移动对象的脚本(一个 png 文件),但是当我将这两个脚本添加在一起时,对象会随机移动。作为程序,我使用 Unity。
移动脚本:
using UnityEngine;
using System.Collections;
public class DragDropScript : MonoBehaviour
private Vector3 screenPoint;
private Vector3 offset;
void OnMouseDown()
Debug.Log("mouse down");
screenPoint = Camera.main.WorldToScreenPoint(transform.position);
offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
void OnMouseDrag()
Debug.Log("mouse drag");
Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset;
transform.position = curPosition;
还有旋转脚本
using UnityEngine;
using System.Collections;
public class ObjectRotator : MonoBehaviour
private float _sensitivity;
private Vector3 _mouseReference;
private Vector3 _mouseOffset;
private Vector3 _rotation;
private bool _isRotating;
void Start ()
_sensitivity = 0.4f;
_rotation = Vector3.zero;
void Update()
if(_isRotating)
// offset
_mouseOffset = (Input.mousePosition - _mouseReference);
// apply rotation
_rotation.z = -(_mouseOffset.x + _mouseOffset.y) * _sensitivity;
// rotate
transform.Rotate(_rotation);
// store mouse
_mouseReference = Input.mousePosition;
void OnMouseDown()
// rotating flag
_isRotating = true;
// store mouse
_mouseReference = Input.mousePosition;
void OnMouseUp()
// rotating flag
_isRotating = false;
到目前为止,我一直在与 Unity 斗争。在我的学士论文中,我得到了一个 HoloLens2,并且可以使用真正有助于开发应用程序的 MRTK。提前谢谢你。 最后,游戏应该构建为 WebGL。
【问题讨论】:
【参考方案1】:随机结果可能是由于尝试同时移动和旋转对象。一个简单的解决方法是在鼠标左键上移动并通过右键单击旋转,反之亦然。您可以使用Input.GetMouseButton 检查是否按下按钮并在脚本中插入检查以仅移动 OR 旋转。
更复杂的解决方案将涉及某种被拖动的“小部件”,这样您就可以使用不同的小部件进行拖动和旋转。
我还建议您学习一些几何学和三角学,以便能够理解发布的脚本。复制互联网的脚本只会让你走这么远。
【讨论】:
感谢您的回答。你知道如何让这个应用程序在触控设备上运行吗?关于 Input.GetTouch 的 Unitys 文档没有提供足够的信息,因为在触摸设备上,您无法选择鼠标左键或右键。我还尝试使用“小部件”的方法。因此,我创建了一个带有连接对象的线的圆圈。但不知何故,我在移动和旋转对象时遇到了困难,因为我找不到对象的正确层次顺序。 @LeeDatAR 我对统一性不够熟悉,无法提供任何具体建议。以上是关于在鼠标拖动时旋转和移动 2D 对象的主要内容,如果未能解决你的问题,请参考以下文章