Ejemplo n.º 1
0
 public void Init(GameObject game_object, CollisionLayer layer, CollisionPushType push, int find_layer)
 {
     collision_push_type_ = push;
     collision_type_      = layer;
     RpgCollisionConnection.AddCollisionConstruction(this);
     rpg_collision_details_control_ = new RpgCollisionDetailsControl();
     this_object_ = game_object;
     rpg_collision_details_control_.Init(this_object_);
     rpg_collision_details_control_.AutoAddCollisionDetails(this, find_layer);
 }
Ejemplo n.º 2
0
    /// <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);
                    }
                }
            }
        }
    }
Ejemplo n.º 3
0
 /// <summary>
 /// 更新処理(当たり判定)
 /// </summary>
 /// <param name="collision"></param>
 public void UpdateCollision(BaseCollisionConstruction collision, RpgCollisionDetailsControl this_collision_control, List <BaseCollisionConstruction> opponent_collider)
 {
     if (collision == null)
     {
         return;
     }
     if (rpg_collision_ == null)
     {
         return;
     }
     Collider[] colliders = CollisionTypeOverLap();
     RpgCollisionCalculation.CollisionCorrection(collision, this_collision_control, this, opponent_collider, colliders);
 }