#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. В любом случае спасибо.