C# 通过鼠标拖动旋转和移动二维对象

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

我想重新制作一个游戏(七巧板),你可以旋转和移动棋子。 该游戏可在以下网站上找到:

我找到了用于旋转和移动对象的脚本(png文件),但当我将这两个脚本添加到一起时,对象会随机移动。作为计划,我使用统一

移动脚本:

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不够熟悉,无法提供任何具体的建议。