/// <summary> /// クロスシミュレーション計算開始 /// </summary> /// <param name="update"></param> public void UpdateStartSimulation(UpdateTimeManager update) { // 時間 float dtime = update.DeltaTime; float updatePower = update.UpdatePower; float updateIntervalTime = update.UpdateIntervalTime; int ups = update.UpdatePerSecond; // 活動チームが1つ以上ある場合のみ更新 if (Team.ActiveTeamCount > 0) { // 今回フレームの更新回数 int updateCount = Team.CalcMaxUpdateCount(ups, dtime, updateIntervalTime); //Debug.Log("updateCount:" + updateCount + " dtime:" + Time.deltaTime); // 風更新 Wind.UpdateWind(); // チームデータ更新、更新回数確定、ワールド移動影響、テレポート Team.PreUpdateTeamData(dtime, updateIntervalTime, ups, updateCount); // ワーカー処理 WarmupWorker(); // ボーン姿勢をパーティクルにコピーする Particle.UpdateBoneToParticle(); // 物理更新前ワーカー処理 //MasterJob = RenderMeshWorker.PreUpdate(MasterJob); // 何もなし MasterJob = VirtualMeshWorker.PreUpdate(MasterJob); // 仮想メッシュをスキニングしワールド姿勢を求める MasterJob = MeshParticleWorker.PreUpdate(MasterJob); // 仮想メッシュ頂点姿勢を連動パーティクルにコピーする //MasterJob = SpringMeshWorker.PreUpdate(MasterJob); // 何もなし //MasterJob = AdjustRotationWorker.PreUpdate(MasterJob); // 何もなし //MasterJob = LineWorker.PreUpdate(MasterJob); // 何もなし //MasterJob = BaseSkinningWorker.PreUpdate(MasterJob); // ベーススキニングによりbasePos/baseRotをスキニング // パーティクルのリセット判定 Particle.UpdateResetParticle(); // 物理更新 for (int i = 0, cnt = updateCount; i < cnt; i++) { UpdatePhysics(updateCount, i, updatePower, updateIntervalTime); } // 物理演算後処理 PostUpdatePhysics(updateIntervalTime); // 物理更新後ワーカー処理 MasterJob = TriangleWorker.PostUpdate(MasterJob); // トライアングル回転調整 MasterJob = LineWorker.PostUpdate(MasterJob); // ラインの回転調整 MasterJob = AdjustRotationWorker.PostUpdate(MasterJob); // パーティクル回転調整(Adjust Rotation) Particle.UpdateParticleToBone(); // パーティクル姿勢をボーン姿勢に書き戻す(ここに挟まないと駄目) MasterJob = SpringMeshWorker.PostUpdate(MasterJob); // メッシュスプリング MasterJob = MeshParticleWorker.PostUpdate(MasterJob); // パーティクル姿勢を仮想メッシュに書き出す MasterJob = VirtualMeshWorker.PostUpdate(MasterJob); // 仮想メッシュ座標書き込み(仮想メッシュトライアングル法線計算) MasterJob = RenderMeshWorker.PostUpdate(MasterJob); // レンダーメッシュ座標書き込み(仮想メッシュからレンダーメッシュ座標計算) // 書き込みボーン姿勢をローカル姿勢に変換する Bone.ConvertWorldToLocal(); // チームデータ後処理 Team.PostUpdateTeamData(); } }