2016-08-26 3 views
0

Ich habe folgendes Problem mit meinem Unity3D-Projekt. Ich werde versuchen, es auf Bildern zu beschreiben.Unity 3D - Objektposition und ihre Größe

first image

enter image description here

Deshalb möchte ich Objekte in 1. Wenn Objekt 1 und 2 stoßen zusammen fusionieren, dann verschmelzen sie (Objekt 2 wurde Kind des Objekts 1). In der Praxis habe ich es geschafft, wenn Objekt 1 (dieses blaue "Etwas" ist Schraube) kollidieren mit Objekt 2, dann sollten sie zusammenführen. Und ich möchte Objekt 2 über Objekt 1 positionieren (oben sage ich, wo die roten Linien sind, rechts im zweiten Bild). Daher entscheide ich mich dafür, localPosition des zweiten Objekts so zu setzen, dass es der localPosition des Bolzens entspricht (auch die Schraube ist Kind von Objekt 1). Aber das war falsch (zweites Bild, linke Seite). So bekomme ich die Idee, dass ich die Hälfte der zweiten Objekthöhe zu einer seiner Achsen hinzufügen soll. Aber es ist immer noch nicht perfekt. Und ich weiß auch nicht, zu welcher Achse ich es hinzufügen soll. Und sollte ich localPosition oder normale Position verwenden, wenn ich diese Hälfte der Höhe hinzufüge?

Mein Code:

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

Ich muss hinzufügen, dass Objekte unterschiedlicher Größe haben kann, so kann ich nicht nur eine Nummer hinzufügen, müssen sie flexibel sein. Ich werde für jede Hilfe sehr dankbar sein.

EDIT: Das ist mein ganzer Code:

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

} }

Ich werde erklären, was das bedeutet:

  • MainObject ist das erste Objekt in der Abbildung.
  • c.gameObject.transform.parent.gameObject ist das zweite Objekt von Bild
  • Gameobject Schraube (blau etwas in 1 Objekt) ist
  • Skript in Riegel (blau etwas auf dem Bild) angebracht sind
+0

Können Sie bitte vollständigen Code schreiben, so kann ich Wer ist 'childObject', wer ist mainObject und an welches gameObject ist dieses Skript angehängt? –

+0

Ich habe meinen Beitrag komplett bearbeitet – Celdur

Antwort

0

benutzen Sie einfach die Position des ersten Objekts und bounds.size:

vector3 posOfSecObject = new vector3 (0,0,0);

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

habe ich die Y-Achse, ich weiß nicht, welches benötigen Sie, nur versuchen;) Ich diesen Code verwendet, um ein Haus zu bauen, die aus Böden