c# - Unity:当父母克隆对象时,它会立即取消父母
问题描述
我想使用以下代码克隆一个对象并将其设置为另一个对象的子对象:
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);
}
}
此方法应该在玩家将物体放在盘子上方时触发。该对象应该隐藏并生成它的克隆以出现在盘子上。
稍后,该脚本也应该附加到生成的克隆上,以便玩家可以在盘子上堆叠对象。但我还没有做到这一点,因为我什至没有迈出第一步,正如我们所看到的......
解决方案
spawnClone.transform.parent = plate.transform;
应该这样做,如果盘子应该是父母
编辑
我重新创建了您的代码,如下所示
public class Test : MonoBehaviour{
private void OnTriggerEnter2D(Collider2D other)
{
Vector2 position;
other.gameObject.SetActive(false);
position = this.gameObject.transform.position;
position.y += 0.5f;
if (transform.childCount >= 1)
{
Transform lastChild = transform.GetChild(transform.childCount - 1);
position = lastChild.transform.position;
position.y += 0.5f;
}
GameObject spawnClone = Instantiate(other.gameObject, position, Quaternion.identity);
Destroy(spawnClone.GetComponent<Collider2D>());
spawnClone.GetComponent<Rigidbody2D>().isKinematic = true;
spawnClone.transform.parent = this.gameObject.transform;
spawnClone.SetActive(true);
}
}
我得到了这种行为,这就是我认为你想要的
我在这里唯一的结论是
burgerGameManager.addToPlayerOrder(other.gameObject);
可能会影响育儿。也许尝试在函数末尾移动它,看看会发生什么?
推荐阅读
- hibernate - JSF selectCheckboxMenu & Hibernate @ManyToMany 删除值
- curl - 从 symfony 中的 auth 身份验证返回时出现 curl 错误 6
- android - 如何进行节点翻译?
- php - 从 Laravel 生态系统中移除 PHP 脚本
- python - 数据透视表排序
- c# - Xunit Test/NET.Core/ 基于 InlineData 的理论从我的模型中获取我的字段值,同时测试控制器
- go - main 函数是作为 goroutine 运行的吗?
- python - 在python中查找另一个变量的每个十分位数中一个变量的比例
- javascript - 数据表 javascript - RoR
- javascript - 无法从 firebase 获取令牌以进行消息传递