Привязка объектов друг к другу во время выполнения в UnityC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Привязка объектов друг к другу во время выполнения в Unity

Сообщение Anonymous »

Я пытаюсь создать игру, в которой вы сами будете ковать мечи, похожую на «Bladesong». Я уже сделал 3D-модель лезвия меча и шипы, которые вы сможете прикрепить к режущей кромке лезвия. Шипы должны привязываться к краю и перемещаться по краю с помощью перетаскивания. Я не могу понять, как привязать один объект к другому и заставить его перемещаться во время выполнения
Я пытался задать ChatGPT, но это не дало мне удовлетворительного результата, который даже сработал
РЕДАКТИРОВАТЬ: Вот код ChatGPT, который абсолютно не работал:
public class DragAndDropOnLine : MonoBehaviour
{
public GameObject startPoint;
public GameObject endPoint;
private bool isDragging = false;
private Vector3 offset;
private Camera mainCamera;

void Start()
{
mainCamera = Camera.main;
}

void Update()
{
if (isDragging)
{
DragObject();
}

if (Input.GetMouseButtonUp(0) && isDragging)
{
isDragging = false;
PlaceObject();
}
}

void OnMouseDown()
{
isDragging = true;
offset = transform.position - GetMouseWorldPosition();
}

void DragObject()
{
Vector3 mousePosition = GetMouseWorldPosition() +
offset;
Vector3 closestPoint =
GetClosestPointOnLine(startPoint.transform.position,
endPoint.transform.position, mousePosition);
transform.position = closestPoint;
}

Vector3 GetMouseWorldPosition()
{
Vector3 mousePos = Input.mousePosition;
mousePos.z = Mathf.Abs(mainCamera.transform.position.z);
return mainCamera.ScreenToWorldPoint(mousePos);
}

Vector3 GetClosestPointOnLine(Vector3 lineStart, Vector3
lineEnd, Vector3 point)
{
Vector3 lineDirection = (lineEnd -
lineStart).normalized;
float lineLength = Vector3.Distance(lineStart, lineEnd);
Vector3 projection = Vector3.Project(point - lineStart,
lineDirection);
float projectedLength =
Mathf.Clamp(projection.magnitude, 0,
lineLength);
return lineStart + lineDirection * projectedLength;
}

void PlaceObject()
{
Debug.Log("Object placed at position: " +
transform.position);
}
}

Вот код из руководства по перетаскиванию, которое я нашел на YouTube:
public class DragandDrop : MonoBehaviour
{
Vector3 mousePosition;

private Vector3 getMousePos()
{
return Camera.main.WorldToScreenPoint(transform.position);
}

private void OnMouseDown()
{
mousePosition = Input.mousePosition - getMousePos();
}

private void OnMouseDrag()
{
transform.position =
Camera.main.ScreenToWorldPoint(Input.mousePosition -
mousePosition);
}
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... e-in-unity
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Привязка объектов друг к другу во время выполнения в Unity
    Anonymous » » в форуме C#
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Сгруппированные пузыри или пузыри близко друг к другу?
    Anonymous » » в форуме Python
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Сгруппированные пузыри или пузыри близко друг к другу?
    Anonymous » » в форуме Python
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Как удалить контуры, расположенные слишком близко друг к другу по осям X OPENCV — PYTHON
    Anonymous » » в форуме Python
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Мои пользователи чата не подключаются друг к другу
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»