1

我的 Unity3D 项目有以下问题。我将尝试在图像上描述它。

第一张图片

在此处输入图像描述

所以我想将对象合并为 1。当对象 1 和 2 发生碰撞时,它们会合并(对象 2 成为对象 1 的子对象)。在实践中,当对象 1 中的螺栓(这个蓝色的“东西”是螺栓)与对象 2 碰撞时,我做到了,然后它们应该合并。我想将对象 2 放在对象 1 的顶部(说顶部我的意思是红线在哪里,第二张图片中的右图)。所以我决定将第二个对象的 localPosition 设置为等于 bolt 的 localPosition(bolt 也是对象 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));
   }
}

我必须补充一点,对象可以有不同的大小,所以我不能只添加一个数字,它必须灵活。我将非常感谢任何帮助。

编辑:这是我的整个代码:

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 是图片中的第二个对象
  • gameObject 是螺栓(1 个对象中有蓝色的东西)
  • 脚本附在螺栓中(图片上的蓝色东西)
4

1 回答 1

0

只需使用您的第一个对象和 bounds.size 的位置:

矢量3 posOfSecObject = 新矢量3(0,0,0);

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

我用的是Y轴,不知道你需要哪个,试试看;)我用这段代码建了一个由地板组成的房子

于 2016-08-26T10:41:58.730 回答