对entityref的使用场景有点模糊,是只有从对象池创建的entity才有必要使用吧,请大佬帮忙确认一下
在群里讨论了一下,确实只有从对象池创建的entity才有必要使用,只是分析器会限制实体类使用实体字段,所以哪怕有些场景不需要使用entityref也需要entityref来避开分析器的报错
任何需要在组件中引用其它Entity的都可以使用,并不是只有对象池
egametang 嗯嗯,我理解这个entityref的意义有两个,一是对象池中创建出来的entity如果被释放了,不使用entityref会无法判断entity是否被释放,不是对象池创建出来的没影响,二是频繁需要getcomponent的entity可以使用entityref减少getcomponent的损耗,但是问题是会绕过IGetComponentSysSystem,可能会影响实现IGetComponentSysSystem接口的entity,要注意使用。应该是这样理解的吧
colden-rabbit 不是对象池的创建出来也有影响?比如,A有一个成员是B(B不是对象池创建),B在别的地方被dispose了,这时B的层级关系全部没了。这时A拿B出来用,会发现B的所有组件都没有了。
没错
我觉得如果只是释放Dispose,可以通过判断Entity.InstanceId是否为0来识别吧? EntityRef更多的是为了FIber同一个Update逻辑里,相同的Entity被释放又被重新启用导致没法通过InstanceId==0去识别。例如刚回收进对象池,马上被取出来重新用了,这个时候,就可以通过创建EntityRef时的InstanceId和当前Entity的InstanceId不同来识别出之前的Entity引用需要删掉了。这是我的理解