public override Player BuildInClient(Player obj, PlayerBuildInfo info) { if (info.id == Clients.Client.instance.myID) { obj.gameObject.AddComponent <InputSender>(); Camera.main.gameObject.AddComponent <CameraTrack>().trackPlayer = obj.transform; } obj.InitBars(); int barOffset = 0; obj.barList.ForEach((Bar bar) => { InitBarRigidbody(bar.gameObject.AddComponent <Rigidbody>()); Animator ani = InitBarAnimator(bar.gameObject.AddComponent <Animator>()); if (info.id == Clients.Client.instance.myID) { bar.gameObject.AddComponent <HeroBarCollision>().InitAnimator(ani); } else { bar.gameObject.AddComponent <Clients.BarCollision>().InitAnimator(ani); } bar.Init(StageObjectCategory.Dynamic, info.firstBar + barOffset); bar.InitMeshRenderer(); barOffset++; }); Team team = TeamManager.instance.TryAddTeamByDescribe(info.teamDescribe); if (team != null) //如果客户端新加了队伍,尝试寻找球门 { TeamManager.instance.TryGetGoalFromCache(team); } TeamManager.instance.AddToTeam(obj, info.teamDescribe.id); ResourcesManager.LoadAndInstantiate("ChargeParticle", obj.transform, (GameObject g) => { obj.gameObject.AddComponent <PlayerCharge>().Init(obj, g.GetComponent <ParticleSystem>()); }); return(obj); }
/// <summary> /// 通过BuildInfo实例化Prefab(初始化位置信息) /// </summary> /// <param name="info">给定的BuildInfo</param> /// <returns></returns> public GameObject InstantiateByInfo(Tinfo info) { Debug.Log($"由{GetType().Name} 创建 {info.category} - {info.id}"); GameObject prefab = ResourcesManager.Get <GameObject>(info.prefabName); if (prefab) { if (info.position == null && info.rotation == null) { return(Object.Instantiate(prefab)); } else { Vector3 pos = info.position == null ? Vector3.zero : info.position.Value; Quaternion rot = info.rotation == null ? Quaternion.identity : info.rotation.Value; return(Object.Instantiate(prefab, pos, rot)); } } else { Debug.Log($"没有找到名为{info.prefabName}的Prefab"); } return(null); }