Как создать скрипт Unity для перетаскивания в 3D-сцене

#unity3d

#unity3d

Вопрос:

Я хочу создать скрипт, который работает для перетаскивания объекта в 3D. Таким образом, скрипт должен иметь возможность изменять положение объекта по осям X, Y и Z. Я кое-что нашел и немного изменил, но это работает не так, как я хочу, чтобы это работало. Вот мой код. Как я должен подойти к этому, чтобы решить эту проблему?

 using System.Collections;

using System.Collections.Generic;

using UnityEngine;



public class DragAndDrop : MonoBehaviour

{
bool rayCast;
private Vector3 mOffset;
RaycastHit modelobject;
private float mZCoord;
private void Start()
{

}
private void Update()
{

  /*  if (Physics.Raycast(transform.position, transform.forward, out modelobject, 20f))
    {
        if (modelobject.collider.gameObject.name == this.gameObject.name)
        {
            Debug.Log("Piece has been found");
            if (Mathf.Approximately(modelobject.transform.position.x, this.gameObject.transform.position.x) amp;amp; Mathf.Approximately(modelobject.transform.position.y, this.gameObject.transform.position.y))
            {
                Debug.Log("Found");
       //         this.gameObject.AddComponent<Drag>();
                this.enabled = false;
            }
        }
    }*/
}

void OnMouseDown()
{


    mZCoord = Camera.main.WorldToScreenPoint(

        gameObject.transform.position).z;



    // Store offset = gameobject world pos - mouse world pos

    mOffset = gameObject.transform.position - GetMouseAsWorldPoint();


}



private Vector3 GetMouseAsWorldPoint()

{
    // Pixel coordinates of mouse (x,y)

    Vector3 mousePoint = Input.mousePosition;



    // z coordinate of game object on screen

    mousePoint.z = mZCoord;



    // Convert it to world points

    return Camera.main.ScreenToWorldPoint(mousePoint);
}



void OnMouseDrag()

{

    transform.position = GetMouseAsWorldPoint()   mOffset;


}
private void OnCollisionEnter(Collision collision)
{
    if (collision.collider.name == this.gameObject.name)
    {
        Debug.Log("Correct");
        this.gameObject.transform.position = collision.collider.gameObject.transform.position;
    }
}
  

}

Комментарии:

1. Привет! Нам нужно некоторое разъяснение. Вы пытаетесь сделать это в редакторе (просмотр сцены) или во время игры (просмотр игры)?

Ответ №1:

Я думаю, вам будет сложно перемещаться по всем трем осям одновременно. Вероятно, вам потребуется использовать аналогичный подход к тому, что делает Unity, и иметь обработчики стрелок на осях x, y и z для перетаскивания каждой оси по отдельности. В противном случае будет очень сложно реализовать третью ось глубины в ваших элементах управления. Единственный способ, которым я могу увидеть, как это делается сразу, — использовать колесо прокрутки для ручного увеличения или уменьшения третьей оси.

Комментарии:

1. Таким образом, я изменил позиции z объекта и сделал их стабильными, теперь я использую только X и Y. В любом случае спасибо.