Я пытался реализовать инструмент перемещения, похожий на тот, который встроен в редактор Unity.После неудачи я потратил много часов, пытаясь найти способ сделать это.Я придумал это:
Plane groundPlane = new Plane(Vector3.up, Tracked.position);
Plane rightPlane = new Plane(Vector3.right, Tracked.position);
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
switch (axis)
{
case Axis.X:
if (groundPlane.Raycast(ray, out ent))
{
float deltaPosX = ray.GetPoint(ent).x - lastHitPos.x;
Tracked.position = new Vector3(Tracked.position.x + deltaPosX, Tracked.position.y, Tracked.position.z);
lastHitPos = ray.GetPoint(ent);
}
break;
case Axis.Y:
if (rightPlane.Raycast(ray, out ent))
{
float deltaPosY = ray.GetPoint(ent).y - lastHitPos.y;
Tracked.position = new Vector3(Tracked.position.x, Tracked.position.y + deltaPosY, Tracked.position.z);
lastHitPos = ray.GetPoint(ent);
}
break;
case Axis.Z:
if (groundPlane.Raycast(ray, out ent))
{
float deltaPosZ = ray.GetPoint(ent).z - lastHitPos.z;
Tracked.position = new Vector3(Tracked.position.x, Tracked.position.y, Tracked.position.z + deltaPosZ);
lastHitPos = ray.GetPoint(ent);
}
break;
}
Исправлены ссылки!Редактор Unity: https://youtu.be/I0DAVa7GIeo
Что у меня сейчас есть: https://youtu.be/cTykv-KTNOY