/// <summary> /// 計算結果 /// </summary> /// <param name="pos"></param> public void CollisionPositionCalculation(Vector3 pos) { foreach (var collision in list_rpg_collision_details_) { RpgCollisionDetailsAccessor.SaveCollisionPositionCaculation(collision, pos); RpgCollisionDetailsAccessor.CalculationPositionCaculation(collision, pos); } }
/// <summary> /// 当たり判定の計算 /// </summary> /// <param name="this_collison"></param> /// <param name="collision_details"></param> /// <param name="collider"></param> public static void CollisionCorrection(BaseCollisionConstruction this_collison, RpgCollisionDetailsControl this_collision_control, RpgCollisionDetails collision_details, List <BaseCollisionConstruction> opponent_collider, Collider[] colliders) { if (this_collison == null || collision_details == null) { return; } if (opponent_collider.Count == 0) { return; } //強制終了用のカウント int cnt = 0; for (int i = 0; i < opponent_collider.Count; i++) { cnt++; Exit(cnt); Vector3 pushBackVector = Vector3.zero; float pushBackDistance = 0.0f; if (this_collision_control == opponent_collider[i].RpgCollisionDetailsControl) { continue; } List <RpgCollisionDetails> detaile = opponent_collider[i].RpgCollisionDetailsControl.ListRpgCollisionDetaile; foreach (var opponent_col in detaile) { if (opponent_col == collision_details) { continue; } string name = opponent_col.RpgCollision.gameObject.name; string name2 = collision_details.RpgCollision.gameObject.name; ///めり込んでいた場合 if (ComputePenetration(this_collison.CollisionPushType, collision_details.RpgCollision, RpgCollisionDetailsAccessor.CalculationPosition(collision_details) , opponent_col.RpgCollision, RpgCollisionDetailsAccessor.SaveCollisionPosition(opponent_col) , ref pushBackVector, ref pushBackDistance)) { if (pushBackDistance >= float.Epsilon) { Vector3 updatedPostion = (pushBackVector) * (pushBackDistance); this_collison.ThisObject.transform.position += new Vector3(updatedPostion.x, updatedPostion.y, updatedPostion.z); RpgCollisionDetailsAccessor.SaveCollisionPosition(collision_details, this_collison.ThisObject.transform.position); RpgCollisionDetailsAccessor.CalculationPosition(collision_details, this_collison.ThisObject.transform.position); this_collision_control.CollisionHitEnter(opponent_col.RpgCollision, opponent_col); opponent_collider[i].RpgCollisionDetailsControl.CollisionHitEnter(collision_details.RpgCollision, collision_details); } } } } }