public void Initialize() { IsOwner = ReferenceEquals(Source, null); // make this a bit faster Behaviours = UnityObject.GetComponentsInChildren(typeof(IEntityBehaviour)).Select(x => x as IEntityBehaviour).Where(x => x != null).ToArray(); // assign usertokens UnityObject.entity = this; // try to find a priority calculator var calculators = UnityObject.GetComponentsInChildren(typeof(IPriorityCalculator), true); foreach (IPriorityCalculator calculator in calculators) { var parent = ((MonoBehaviour)(object)calculator).GetComponentInParent <AscensionEntity>(); if (parent && ReferenceEquals(parent.entity, this)) { PriorityCalculator = calculator; break; } } // use the default priority calculator if none is available if (PriorityCalculator == null) { PriorityCalculator = this; } // find replication filter var filters = UnityObject.GetComponentsInChildren(typeof(IEntityReplicationFilter), true); foreach (IEntityReplicationFilter filter in filters) { var parent = ((MonoBehaviour)(object)filter).GetComponentInParent <AscensionEntity>(); if (parent && ReferenceEquals(parent.entity, this)) { ReplicationFilter = filter; break; } } // use the default replication filter if none is available if (ReplicationFilter == null) { ReplicationFilter = this; } // call into serializer Serializer.OnInitialized(); // call to behaviours (this happens BEFORE attached) foreach (IEntityBehaviour eb in Behaviours) { eb.Initialized(); } }