【发布时间】:2021-09-12 00:15:40
【问题描述】:
我想使用以下代码克隆一个对象并将其设置为另一个对象的子对象:
spawnClone = Instantiate(other.gameObject, position, rotation, plate.transform) as GameObject;
Destroy(spawnClone.GetComponent<Collider>());
//spawnClone.transform.SetParent(plate.transform);
spawnClone.GetComponent<Rigidbody>().isKinematic = true;
spawnClone.SetActive(true);
不幸的是,父子关系不起作用,克隆的对象只是放置在场景的根目录中。如果我尝试将克隆对象移动到层次结构中的任何其他对象中,它会立即再次脱离它(在播放时)。
有什么我做错了或者我没看到的吗?
提前致谢!
编辑:为了更好地理解
我有一个带有子对象(触发器)的游戏对象(盘子)。触发器有一个网格碰撞器(启用触发器)和一个脚本。该脚本具有以下 OnTriggerEnter-Method:
private void OnTriggerEnter(Collider other)
{
if (burgerGameManager.gameElement.Contains(other.gameObject.tag)) {
burgerGameManager.addToPlayerOrder(other.gameObject);
other.gameObject.SetActive(false);
Vector3 position;
if (transform.childCount > 1) {
Transform lastChild = transform.GetChild(transform.childCount - 1);
position = lastChild.position;
} else {
position = plate.transform.position;
position.y = position.y + plate.GetComponent<MeshRenderer>().bounds.size.y;
}
spawnClone = Instantiate(other.gameObject, position, other.gameObject.transform.rotation, gameObject.transform) as GameObject;
Destroy(spawnClone.GetComponent<Collider>());
//spawnClone.transform.SetParent(plate.transform);
spawnClone.GetComponent<Rigidbody>().isKinematic = true;
spawnClone.SetActive(true);
}
}
这个方法应该在玩家将物体放到盘子上方时触发。该对象应该隐藏并生成它的克隆以出现在盘子上。
稍后该脚本也应该附加到生成的克隆上,以便玩家可以在盘子上堆叠对象。但我还没有做到这一点,因为我什至没有迈出第一步……
【问题讨论】:
-
听起来其他一些代码正在影响育儿.. 我不明白为什么您的代码应该按照您描述的方式运行...
-
你设置的父级被注释掉了。
-
@BugFinder 我已将父级设置为实例化方法中的第四个参数。