unity3d 里复制对象本身的一个奇怪问题

在Unity项目中,尝试通过对象复制实现特定功能时遇到无限递归问题。由于复制对象时引用自身导致无限复制的现象发生。文中详细描述了问题出现的原因及一种简单但有效的解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在项目中我需要将一个对象进行复制,于是我在代码中设置了一个绑定字段,将自己拖上去,然后

child = Instantiate<UIChiBiSelector> (this.childSelector);

child.gameObject.name = "child";
if (child != null) {
child.transform.SetParent(this.transform);
child.transform.localScale = Vector3.one;
child.transform.localPosition = getChildLoc();
}

child.setPokers (pokers, samePoker, this.ps, chain, root==null?this:root, cTypes);


这里的一个逻辑是将复制出的作为自己的子级显示。于是这就产生了一个问题。由于拖放的绑定是自己,所以这个引用指向并不是库里的对象。而自己本身。这就会导致在第二次再复制时会将自己已经加了子级的对象再复制一次,这就像两个镜子对着照一样,如此往复,越往后越多,无限生长。

就在我写这个记录时,我想到了这个原因如上。之前我还以为是个BUG。 其实这也应该算是一个问题,就是对引用的不明确。我希望的是像FLASH那样的对自己库中对象的实例化。而在UNITY里则是对自己的复制,并且应该只在我这种使用方式下会出这种问题。但在架构上,这确实是由于引用产生了不明确指向导致的,在把自己当作本体对象时,无法指定到底是自己的实例还是自己的预制体。


问题解决的办法比较笨,但简单,就是复制2个一样的,然后互相拖另一个为复制体。先这样吧,时间紧,任务重,没时间去深究。能实现再说了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值