public virtual void maintainTrack(AMITarget itarget) { Object obj = null; //fix the target info if (itarget.isMeta) { if (string.IsNullOrEmpty(_targetPath)) { obj = GetSerializeObject(null); if (obj) { _targetPath = AMUtil.GetPath(itarget.root, obj); itarget.SetCache(_targetPath, AMUtil.GetTransform(obj)); } } SetSerializeObject(null); } else { obj = GetSerializeObject(null); if (obj == null) { if (!string.IsNullOrEmpty(_targetPath)) { Transform tgt = itarget.GetCache(_targetPath); if (tgt == null) { tgt = AMUtil.GetTarget(itarget.root, _targetPath); } if (tgt) { obj = GetSerializeObject(tgt.gameObject); } SetSerializeObject(obj); } } _targetPath = ""; } //maintain keys foreach (AMKey key in keys) { key.maintainKey(itarget, obj); } }