У меня есть следующая проблема с моим проектом Unity3D. Я попытаюсь описать это на изображениях.Unity 3D - позиция объекта и его размер
Так что я хочу, чтобы объединить на объекты в 1. Когда объект 1 и 2 конфликтуют, то они сливаются (объект 2 стал дочерним объектом 1). На практике я делал это, когда болт в объекте 1 (этот синий «что-то» болт) сталкивается с объектом 2, затем они должны сливаться. И я хочу позиционировать объект 2 поверх объекта 1 (говоря, что я имею в виду, где красные линии, правильное изображение на втором снимке). Поэтому я решил установить localPosition второго объекта равным localPosition болта (болт также является дочерним объектом объекта 1). Но это было неправильно (второе изображение, слева). Поэтому я понимаю, что я должен добавить половину второй высоты объекта к одной из его оси. Но все же это не идеально. А также я не знаю, к какой оси я должен добавить. Должен ли я использовать localPosition или нормальное положение, когда я добавляю эту половину высоты?
Мой код:
void OnTriggerEnter(Collider c) {
if(transform.IsChildOf(mainObject.transform)) {
childObject.transform.SetParent (mainObject.transform);
childObject.transform.localPosition = boltObject.transform.localPosition;
childObject.transform.position = new Vector3 (childObject.transform.position.x, childObject.transform.position.y, (float)(childObject.transform.position.z + childObject.GetComponent<Renderer>().bounds.size.z));
}
}
Я должен добавить, что объекты могут иметь разный размер, поэтому я не могу просто добавить номер, он должен быть гибким. Я буду очень благодарен за любую помощь.
EDIT: Это мой весь код:
using UnityEngine;
using System.Collections;
public class MergeWithAnother : MonoBehaviour {
public GameObject mainObject;
// Use this for initialization
void Start() {
}
// Update is called once per frame
void Update() {
}
void OnTriggerEnter(Collider c) {
if(transform.IsChildOf(mainObject.transform)) {
if (c.gameObject.name == "holeForBolt" && c.gameObject.transform.parent.gameObject != mainObject) {
Destroy (c.gameObject.transform.parent.gameObject.GetComponent("MouseDrag"));
Destroy (c.gameObject.transform.parent.gameObject.GetComponent("RotateObject"));
c.gameObject.transform.parent.gameObject.transform.SetParent (mainObject.transform);
c.gameObject.transform.parent.gameObject.transform.localPosition = gameObject.transform.localPosition;
c.gameObject.transform.parent.gameObject.transform.position = new Vector3 (c.gameObject.transform.parent.gameObject.transform.position.x, c.gameObject.transform.parent.gameObject.transform.position.y, (float)(c.gameObject.transform.parent.gameObject.transform.position.z + c.gameObject.transform.parent.gameObject.GetComponent<Renderer>().bounds.size.z));
c.gameObject.transform.parent.gameObject.transform.localRotation = gameObject.transform.localRotation;
c.gameObject.transform.parent.gameObject.transform.localRotation = new Quaternion (360 + c.gameObject.transform.parent.gameObject.transform.localRotation.x, c.gameObject.transform.parent.gameObject.transform.localRotation.y, c.gameObject.transform.parent.gameObject.transform.localRotation.z, c.gameObject.transform.parent.gameObject.transform.localRotation.w);
Destroy (c.gameObject.transform.parent.gameObject.GetComponent<CapsuleCollider>());
Destroy (gameObject);
Destroy (c.gameObject);
CapsuleCollider cc = mainObject.GetComponent<CapsuleCollider>();
cc.height *= 2;
cc.center = new Vector3(0, 0, 1);
}
}
}}
Я объясню, что это значит:
- MainObject является первым объектом в изображении.
- c.gameObject.transform.parent.gameObject является вторым объектом из картины
- геймобжекты является болтом (синее что-то в 1 объект)
- сценария прилагается болт (синее что-то на картинке)
Можете ли вы опубликовать полный код, так что я могу знаете, кто является 'childObject', кто является mainObject и на каком объекте gameObject установлен этот скрипт? –
Я отредактировал мой пост будет полный код – Celdur