C# 通过鼠标拖动旋转和移动二维对象
我想重新制作一个游戏(七巧板),你可以旋转和移动棋子。 该游戏可在以下网站上找到: 我找到了用于旋转和移动对象的脚本(png文件),但当我将这两个脚本添加到一起时,对象会随机移动。作为计划,我使用统一 移动脚本:C# 通过鼠标拖动旋转和移动二维对象,c#,unity3d,rotation,move,C#,Unity3d,Rotation,Move,我想重新制作一个游戏(七巧板),你可以旋转和移动棋子。 该游戏可在以下网站上找到: 我找到了用于旋转和移动对象的脚本(png文件),但当我将这两个脚本添加到一起时,对象会随机移动。作为计划,我使用统一 移动脚本: using UnityEngine; using System.Collections; public class DragDropScript : MonoBehaviour { private Vector3 screenPoint; private Vector3 o
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;
}
}
到目前为止,我与团结作斗争。在我的学士学位论文中,我获得了HoloLens2,并且可以使用MRTK,这确实有助于开发应用程序。提前谢谢你。
最后,游戏应构建为WebGL。随机结果可能是由于试图同时移动和旋转对象。一个简单的解决方法是用鼠标左键移动并用鼠标右键旋转,反之亦然。您可以使用检查按钮是否按下,并在脚本中插入复选框以仅移动或旋转 更复杂的解决方案将涉及某种拖动的“小部件”,这样您就可以使用不同的小部件进行拖动和旋转
我还建议学习一点几何学和三角学,以便能够理解发布的脚本。复制互联网上的脚本只会让你走到这一步。你应该开始学习一些数学。。。我将从了解二维中的内容开始,并找到一个算法来计算给定图形的集合(所以使用png是错误的方法-您需要矢量图形)。。。然后它应该是容易的,因为你们需要另一个点,并通过拖动这个点围绕重心旋转图形。。。这就是为什么不懂数学的编程是一个神话,谢谢。作为机械工程师,我熟悉质心的概念。我想知道你是否知道Unity是否有一个插件(比如微软的MRTK)来简化开发。但我肯定会学到一些关于矢量图形的知识。谢谢你的回答。您知道如何使此应用程序在触摸设备上工作吗?Unitys关于Input.GetTouch的文档没有提供足够的信息,因为在触摸设备上不能选择鼠标左键或右键。我还尝试将该方法用于“小部件”。因此,我创建了一个圆,其中有一条线连接对象。但不知何故,我很难移动和旋转对象,因为我找不到对象的正确层次顺序。@LeeDatAR我对unity不够熟悉,无法提供任何具体的建议。