Я пытаюсь создать игру, в которой вы сами будете ковать мечи, похожую на «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
Привязка объектов друг к другу во время выполнения в Unity ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как удалить контуры, расположенные слишком близко друг к другу по осям X OPENCV — PYTHON
Anonymous » » в форуме Python - 0 Ответы
- 26 Просмотры
-
Последнее сообщение Anonymous
-