我的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);
}
}
} }
我将解释这意味着什么:
答案 0 :(得分:0)
只需使用第一个对象的位置和bounds.size:
vector3 posOfSecObject = new vector3(0,0,0);
posOfSecObject.y + = 。FIRSTOBJECT.GetComponent()Renderer.bounds.size.y;
我使用了Y轴,我不知道你需要哪一个,只是尝试;)我用这个代码来建造一个由地板组成的房子