В рамках моего проекта я разработал сферу, которую пользователь может перемещать с помощью мыши.Поскольку перетаскивание в Unity может выполняться только с учетом двух измерений одновременно, я разработал механизм, позволяющий изменить перетаскивание на плоскости xy на перетаскивание на плоскости xz, и наоборот.Однако программа определенно не удобна для пользователя, так как при перетаскивании на 2D-плоскость сложно управлять объектом в трехмерном пространстве (например, плоскость xy или плоскость xz).Эта проблема только усугубляется тем, что существует серьезная проблема задержки ввода.Кажется, что не каждое нажатие на клавишу Shift для смены плоскостей регистрируется, и часто мне приходится нажимать Shift несколько раз, чтобы сменить плоскость.
Я попытался изменить местоположение вызова OnMouseDrag () в разных местах в методе update ().Это не сработало.
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
[RequireComponent(typeof(MeshCollider))]
public class UserController : MonoBehaviour
{
bool shiftOn = false;
void OnMouseDrag()
{
if (Input.GetMouseButton(0))
{
if (shiftOn)
{
//3D Drag, courtesy of Unity Forums
float distance_to_screen = Camera.main.WorldToScreenPoint(gameObject.transform.position).z;
transform.position = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, distance_to_screen));
}
else
{
//Plane Drag
float distance_to_screen = Camera.main.WorldToScreenPoint(gameObject.transform.position).z;
Vector3 pos_move = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, distance_to_screen));
transform.position = new Vector3(pos_move.x, transform.position.y, pos_move.z);
}
}
}
void changeShift()
{
shiftOn = !shiftOn;
}
// Update is called once per frame
void Update()
{
if (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift))
{
changeShift();
}
OnMouseDrag();
}
}
Задержка на входе все еще существует.Сменные звонки часто не регистрируются, и мне приходится нажимать его несколько раз.Я довольно легко теряю контроль над сферой, пытаясь переключать размеры.
Как избавиться от этой задержки ввода?Есть ли лучший способ справиться с этим?Есть ли способ, с помощью которого вы можете перетаскивать объекты в трехмерном пространстве с помощью мыши, одновременно контролируя все три измерения?
Все ответы приветствуются.
Большое спасибо за чтение, и яс нетерпением ждем ваших предложений.