Как я могу интегрировать несколько объектов в одно физическое твердое тело? - PullRequest
0 голосов
/ 02 мая 2018

Итак, у меня есть эти кубы, которые я могу перетаскивать по сцене. Я пытаюсь сделать так, чтобы эти кубы интегрировали / привязывали / прикрепляли, или как вы хотите это называть. Когда они приблизятся друг к другу, как в видео, я хочу, чтобы они прикреплялись друг к другу и действовали как один объект, а не тянулись друг от друга? Вот код, который я должен перетащить кубиками:

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);
}
}

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 02 мая 2018

Для этого вам нужно будет использовать Фиксированное соединение . Неподвижное соединение позволит вам соединить два жестких тела в одно твердое тело. В основном, добавьте Fixedjoint к игровому объекту и OnCollisionEnter, вы просто присоединяете connectedBody в качестве объекта столкновения. Это должно позволить вам соединить два объекта как один.

Я не работал в любое время с fixedjoint, поэтому немного покопался и создал небольшую программу, в которой два куба объединялись и действовали как один объект. Это работает как законченный объект. В вашем случае вам потребуется несколько фиксированных соединений для объединения нескольких объектов. Вот небольшой скрипт, который я сделал, чтобы прикрепить два куба. Надеюсь, это поможет вам в вашей работе.

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...