public void LaunchFishByAsycScene(NetCmdPack pack) { NetCmdSyncFish cmdFish = (NetCmdSyncFish)pack.cmd; GroupDataList gdl = FishResManager.Instance.GetFishGroup(cmdFish.GroupID); float elapsedTime = Utility.TickSpan(pack.tick) + SceneRuntime.NetDelayTime; if (gdl.PathGroupData != null) { FishPathGroupData pathgroup = gdl.PathGroupData; PathLinearInterpolator[] interpList = PathManager.Instance.GetPathGroup(pathgroup.PathGroupIndex, SceneRuntime.Inversion); if (cmdFish.PathIdx >= interpList.Length) { LogMgr.Log("路径数量和服务器不一致,路径群:" + cmdFish.PathGroup + ", 索引:" + cmdFish.PathIdx); } { Fish fish = new Fish(); fish.Init(cmdFish.FishID, pathgroup.FishIndex, pathgroup.FishScaling, cmdFish.FishTime, pathgroup.ActionSpeed, pathgroup.ActionUnite, pathgroup.Speed, interpList[cmdFish.PathIdx]); #if UNITY_EDITOR fish.SetModelName("Fish_PathGroup_" + cmdFish.GroupID); #endif if (fish.Update(elapsedTime)) { SetFish(fish); fish.Controller.CheckCurrentEvent(cmdFish.IsActiveEvent); fish.Controller.PathEvent.m_CurElapsedTime = cmdFish.ElapsedTime * 0.001f; if (cmdFish.Package != 255) { fish.SetPackage(cmdFish.Package); } if (cmdFish.DelayType != (byte)FISH_DELAY_TYPE.DELAY_NONE) { float scl; float[] dur = new float[3]; Utility.ReductionToFloat(cmdFish.DelayScaling, cmdFish.DelayDuration1, cmdFish.DelayDuration2, cmdFish.DelayDuration3, out scl, dur); float time = cmdFish.DelayCurrentTime * 0.001f; fish.Controller.TimeController.AddSkillTimeScaling(scl, dur, (FISH_DELAY_TYPE)cmdFish.DelayType, time); } } } } else { float fInv = SceneRuntime.Inversion ? -1.0f : 1.0f; int pathIndex = cmdFish.PathGroup; int gdIdx = cmdFish.PathIdx >> 8; int fishIdx = cmdFish.PathIdx & 0xff; PathLinearInterpolator pi = PathManager.Instance.GetPath(pathIndex, SceneRuntime.Inversion); if (gdIdx >= gdl.GroupDataArray.Length) { LogMgr.Log("场景鱼同步,索引超出界限1:" + gdIdx); return; } GroupData gd = gdl.GroupDataArray[gdIdx]; { { Fish fish = new Fish(); fish.Init(cmdFish.FishID, gd.FishIndex, gd.FishScaling, cmdFish.FishTime, gd.ActionSpeed, gd.ActionUnite, gd.SpeedScaling, pi); #if UNITY_EDITOR fish.SetModelName("Fish_FishGroup_" + cmdFish.GroupID + "_Path_" + pathIndex); #endif if (fish.Update(elapsedTime)) { if (fishIdx >= gd.PosList.Length) { LogMgr.Log("场景鱼同步,索引超出界限2:" + gdIdx); return; } fish.SetOffset(new Vector3(0, fInv * gd.PosList[fishIdx].y, gd.PosList[fishIdx].z)); SetFish(fish); if (cmdFish.Package != 255) { fish.SetPackage(cmdFish.Package); } fish.Controller.CheckCurrentEvent(cmdFish.IsActiveEvent); fish.Controller.PathEvent.m_CurElapsedTime = cmdFish.ElapsedTime * 0.001f; if (cmdFish.DelayType != (byte)FISH_DELAY_TYPE.DELAY_NONE) { float scl; float[] dur = new float[3]; Utility.ReductionToFloat(cmdFish.DelayScaling, cmdFish.DelayDuration1, cmdFish.DelayDuration2, cmdFish.DelayDuration3, out scl, dur); float time = cmdFish.DelayCurrentTime * 0.001f; fish.Controller.TimeController.AddSkillTimeScaling(scl, dur, (FISH_DELAY_TYPE)cmdFish.DelayType, time); } } } } } }