Итак, у меня есть кубики эти, которые я могу перетаскивать по сцене. Я пытаюсь сделать так, чтобы эти кубы были объединены / привязаны / прикреплены или как вы хотите это назвать. Когда они приближаются друг к другу, как на видео, я хочу, чтобы они прикреплялись друг к другу и действовали как один объект, а не тянулись друг от друга? Это код, который я должен перетаскивать кубиками:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class dragtest7 : MonoBehaviour
{
public float minY = 0.427f;
public float maxY = 0.427f;
public float minZ = 6.536f;
public float maxZ = 15.528f;
public float minX = -5.5f;
public float maxX = 3.493f;
public float minYR = 0;
public float maxYR = 0;
public float minZR = 0;
public float maxZR = 0;
public float minXR = 0;
public float maxXR = 0;
void OnMouseDrag()
{
float distance = Camera.main.WorldToScreenPoint(gameObject.GetComponent<Rigidbody>().position).z;
GetComponent<Rigidbody>().MovePosition(Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, distance)));
}
void Update()
{
Vector3 currentPosition = GetComponent<Rigidbody>().position;
Vector3 currentRotation = GetComponent<Rigidbody>().rotation.eulerAngles;
currentPosition.y = Mathf.Clamp(currentPosition.y, minY, maxY);
GetComponent<Rigidbody>().position = currentPosition;
currentPosition.z = Mathf.Clamp(currentPosition.z, minZ, maxZ);
GetComponent<Rigidbody>().position = currentPosition;
currentPosition.x = Mathf.Clamp(currentPosition.x, minX, maxX);
GetComponent<Rigidbody>().position = currentPosition;
currentRotation.y = Mathf.Clamp(currentRotation.y, minYR, maxYR);
GetComponent<Rigidbody>().rotation = Quaternion.Euler(currentRotation);
currentRotation.z = Mathf.Clamp(currentRotation.z, minZR, maxZR);
GetComponent<Rigidbody>().rotation = Quaternion.Euler(currentRotation);
currentRotation.x = Mathf.Clamp(currentRotation.x, minXR, maxXR);
GetComponent<Rigidbody>().rotation = Quaternion.Euler(currentRotation);
}
}
Любая помощь будет принята с благодарностью.
Для этого вам нужно будет использовать Фиксированное соединение. Фиксированное соединение позволит вам соединить два твердого тела в одно твердое тело. По сути, добавьте Fixedjoint к игровому объекту, а OnCollisionEnter вы просто присоединяете connectedBody как объект столкновения. Это должно позволить вам соединить два объекта как один.
Я никогда не работал с фиксированным соединением, поэтому немного покопался и сделал небольшую программу, в которой два куба объединяются и действуют как один объект. Он действительно работает как законченный объект. В вашем случае вам потребуется несколько фиксированных соединений для объединения нескольких объектов. Вот небольшой скрипт, который я сделал, чтобы прикрепить два кубика. Надеюсь, это поможет вам в вашей работе.
Rigidbody currentRigidBody;
FixedJoint fixedJointObj;
// Use this for initialization
void Start ()
{
currentRigidBody = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update ()
{
if (Input.GetKey(KeyCode.LeftArrow))
{
currentRigidBody.AddForce(new Vector3(-1, 0, 0));
}
if (Input.GetKey(KeyCode.RightArrow))
{
currentRigidBody.AddForce(new Vector3(1, 0, 0));
}
if (Input.GetKey(KeyCode.UpArrow))
{
currentRigidBody.AddForce(new Vector3(0, 1, 0));
}
if (Input.GetKey(KeyCode.DownArrow))
{
currentRigidBody.AddForce(new Vector3(0, -1, 0));
}
}
private void OnCollisionEnter(Collision collision)
{
if (fixedJointObj == null )
fixedJointObj = gameObject.AddComponent<FixedJoint>();
Rigidbody body2;
if ((body2 = collision.gameObject.GetComponent<Rigidbody>()) == null)
return;
fixedJointObj.connectedBody = body2;
}
Если этот ответ решил вашу проблему, не стесняйтесь закрыть вопрос, отметив его как ответ :)