2016-08-26 3 views
0

У меня есть следующая проблема с моим проектом Unity3D. Я попытаюсь описать это на изображениях.Unity 3D - позиция объекта и его размер

first image

enter image description here

Так что я хочу, чтобы объединить на объекты в 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 объект)
  • сценария прилагается болт (синее что-то на картинке)
+0

Можете ли вы опубликовать полный код, так что я могу знаете, кто является 'childObject', кто является mainObject и на каком объекте gameObject установлен этот скрипт? –

+0

Я отредактировал мой пост будет полный код – Celdur

ответ

0

просто использовать положение первого объекта и bounds.size:

VEctor3 posOfSecObject = новый Vector3 (0,0,0);

posOfSecObject.y + = FIRSTOBJECT.GetComponent(). Renderer.bounds.size.y;

Я использовал ось Y, я не знаю, какой из них вам нужно, просто попробовать;) Я использовал этот код, чтобы построить дом, состоящий из этажей

Смежные вопросы