C# 统一-倾斜触摸在z轴而不是y轴上移动对象?

C# 统一-倾斜触摸在z轴而不是y轴上移动对象?,c#,unity3d,game-physics,C#,Unity3d,Game Physics,好的,我使用资产商店的精益触摸,我可以在x和y方向移动对象。对象具有受重力影响的刚体,因此将落在平面上。当它们在一个平面上时,就像在AR中一样,我需要垂直的手指移动来在z轴上移动对象 我不知道怎么做。这就是变换发生的地方: //REAL TRANSLATE protected virtual void Translate(Vector2 screenDelta) { // Make sure the camera exists

好的,我使用资产商店的精益触摸,我可以在x和y方向移动对象。对象具有受重力影响的刚体,因此将落在平面上。当它们在一个平面上时,就像在AR中一样,我需要垂直的手指移动来在z轴上移动对象

我不知道怎么做。这就是变换发生的地方:

//REAL TRANSLATE
        protected virtual void Translate(Vector2 screenDelta)
        {
            // Make sure the camera exists
            var camera = LeanTouch.GetCamera(Camera, gameObject);

            if (camera != null)
            {
                // Screen position of the transform
                var screenPoint = camera.WorldToScreenPoint(transform.position);

                // Add the deltaPosition
                screenPoint += (Vector3)screenDelta;

                transform.position = camera.ScreenToWorldPoint(screenPoint);
这是LeanTranslate.cs中的。如果对象与平面接触,如何在z轴而不是y轴上移动对象

现在:

错误:


现在代码只是将screenDelta变量强制转换为Vector3。这大致相当于新的Vector3screenDelta.x,screenDelta.y,0,使z轴保持为零


因此,您只需将该线替换为一条自定义线,该线将三角形指定给正确的轴。

谢谢,我唯一的问题是它现在沿z轴向相机移动,y不保持不变。对象应与平面保持水平,而是向相机冲去。请参阅我的编辑当前代码正在尝试将位置从屏幕空间投影到世界空间。听起来你只是想在世界空间工作。我会删除最后一行,然后在鼠标位置相对地按delta推动对象,用z代替y。你的意思是do transform.position=screenPoint?这给了我一个无限大的错误贴在上面不,你需要跟踪鼠标的增量,每帧的偏移量,并将其转换为世界坐标,然后添加到transform.position中,以一种在游戏中感觉良好的方式。类似transform.position+=new Vector3screenDelta.x,0,screenDelta.y;
  if(transform.GetComponent<ObjectController>() != null && transform.GetComponent<ObjectController>().isOnPlane)
                {

                    Vector3 newDelta = new Vector3(screenDelta.x, 0, screenDelta.y*0.05f);
                    screenPoint += newDelta;

                } else {
                    screenPoint += (Vector3)screenDelta;
                }


                transform.position = camera.ScreenToWorldPoint(screenPoint);