コード例 #1
0
 void Add_Explosion_Force(Collider Temp_Target_Collider)
 {
     //yield return new WaitForSeconds ( 0.01f * Vector3.Distance ( This_Transform.position , Temp_Target_Collider.transform.position ) ) ;
     if (Temp_Target_Collider)
     {
         Vector3    Ray_Direction = (Temp_Target_Collider.transform.position - This_Transform.position).normalized;
         Ray        Temp_Ray      = new Ray(This_Transform.position, Ray_Direction);
         int        layerMask     = ~((1 << 10) + (1 << 2));
         RaycastHit Temp_RaycastHit;
         if (Physics.Raycast(Temp_Ray, out Temp_RaycastHit, Explosion_Radius, layerMask))
         {
             if (Temp_RaycastHit.collider == Temp_Target_Collider)
             {
                 float Distance_Loss = Mathf.Pow((Explosion_Radius - Temp_RaycastHit.distance) / Explosion_Radius, 2);
                 // Add force.
                 Rigidbody Temp_Rigidbody = Temp_Target_Collider.GetComponent <Rigidbody>();
                 if (Temp_Rigidbody)
                 {
                     Temp_Rigidbody.AddForce(Ray_Direction * Explosion_Force * Distance_Loss);
                 }
                 // Add damage.
                 Damage_Control_CS Temp_Script = Temp_Target_Collider.GetComponent <Damage_Control_CS>();
                 if (Temp_Script)
                 {
                     Temp_Script.Breaker(Explosion_Force * Distance_Loss);
                 }
             }
         }
     }
 }
コード例 #2
0
    void Create()
    {
        // Check for part's children.
        GameObject Temp_Object;
        int        Child_Count = 0;

        if (Parent_Transform.Find("Barrel"))
        {
            Temp_Object = Parent_Transform.Find("Barrel").gameObject;
            Child_Count = Temp_Object.transform.childCount;
        }
        else
        {
            Temp_Object = null;
        }
        // Change children's hierarchy, and delete old part.
        GameObject[] Children = new GameObject[Child_Count];
        if (Child_Count > 0)
        {
            for (int i = 0; i < Child_Count; i++)
            {
                Children[i] = Temp_Object.transform.GetChild(0).gameObject;
                Children[i].transform.parent = Parent_Transform;
            }
        }
        if (Temp_Object)
        {
            DestroyImmediate(Temp_Object);
        }
        // Create new Gameobject & Set Transform.
        GameObject Part_Object = new GameObject("Barrel");

        Part_Object.transform.parent        = Parent_Transform;
        Part_Object.transform.localPosition = -Parent_Transform.localPosition + new Vector3(Offset_XProp.floatValue, Offset_YProp.floatValue, Offset_ZProp.floatValue);
        Part_Object.transform.localRotation = Quaternion.identity;
        // Add components
        Part_Object.AddComponent <MeshRenderer> ();
        Material [] Temp_Materials = new Material [Materials_NumProp.intValue];
        for (int i = 0; i < Temp_Materials.Length; i++)
        {
            Temp_Materials [i] = MaterialsProp.GetArrayElementAtIndex(i).objectReferenceValue as Material;
        }
        Part_Object.GetComponent <Renderer>().materials = Temp_Materials;
        MeshFilter Temp_MeshFilter = Part_Object.AddComponent <MeshFilter> ();

        Temp_MeshFilter.mesh = Part_MeshProp.objectReferenceValue as Mesh;
        if (Collider_MeshProp.objectReferenceValue)
        {
            MeshCollider Temp_MeshCollider = Part_Object.AddComponent <MeshCollider> ();
            Temp_MeshCollider.sharedMesh = Collider_MeshProp.objectReferenceValue as Mesh;
            Temp_MeshCollider.convex     = true;
        }
        if (Sub_Collider_MeshProp.objectReferenceValue)
        {
            MeshCollider Temp_MeshCollider = Part_Object.AddComponent <MeshCollider> ();
            Temp_MeshCollider.sharedMesh = Sub_Collider_MeshProp.objectReferenceValue as Mesh;
            Temp_MeshCollider.convex     = true;
        }
        // Add script
        Damage_Control_CS Temp_Damage_Control_CS = Part_Object.AddComponent <Damage_Control_CS> ();

        Temp_Damage_Control_CS.Type                  = 4; // 4 = Barrel in "Damage_Control"
        Temp_Damage_Control_CS.Durability            = DurabilityProp.floatValue;
        Temp_Damage_Control_CS.Sub_Durability        = Sub_DurabilityProp.floatValue;
        Temp_Damage_Control_CS.Trouble_Time          = Trouble_TimeProp.floatValue;
        Temp_Damage_Control_CS.Trouble_Effect_Object = Trouble_Effect_ObjectProp.objectReferenceValue as GameObject;
        // Set Layer
        Part_Object.layer = 0;
        // Return its children.
        if (Child_Count > 0)
        {
            for (int i = 0; i < Child_Count; i++)
            {
                Children[i].transform.parent = Part_Object.transform;
            }
        }
    }
コード例 #3
0
    void Set_Static_Track_Value()
    {
        // Add Script.
        Static_Track_CS Temp_Script;

        Temp_Script = gameObject.AddComponent <Static_Track_CS> ();
        Temp_Script.Front_Transform = Front_Transform;
        Temp_Script.Rear_Transform  = Rear_Transform;
        if (Type == 1)
        {
            Temp_Script.Type               = 1;
            Temp_Script.Anchor_Name        = Anchor_Name;
            Temp_Script.Anchor_Parent_Name = Anchor_Parent_Name;
        }
        else if (Front_Transform.GetComponent <Static_Track_Setting_CS> ().Type == 1)
        {
            Temp_Script.Type = 2;
        }
        else if (Rear_Transform.GetComponent <Static_Track_Setting_CS> ().Type == 1)
        {
            Temp_Script.Type = 2;
        }
        else
        {
            Temp_Script.Type = 0;
        }
        Temp_Script.enabled = false;
        // Remove_Components.
        if (gameObject.GetComponent <HingeJoint>())
        {
            Destroy(gameObject.GetComponent <HingeJoint>());
        }
        if (GetComponent <Rigidbody>())
        {
            Destroy(GetComponent <Rigidbody>());
        }
        Damage_Control_CS Temp_Damage_Control_Script = GetComponent <Damage_Control_CS> ();

        if (Temp_Damage_Control_Script)
        {
            Destroy(Temp_Damage_Control_Script);
        }
        Stabilizer_CS Temp_Stabilizer_Script = GetComponent <Stabilizer_CS> ();

        if (Temp_Stabilizer_Script)
        {
            Destroy(Temp_Stabilizer_Script);
        }
        // Disable BoxCollider.
        BoxCollider Temp_BoxCollider = GetComponent <BoxCollider> ();

        if (Temp_BoxCollider)
        {
            Temp_BoxCollider.enabled = false;
        }
        // Remove_Child.
        for (int i = 0; i < transform.childCount; i++)
        {
            Destroy(transform.GetChild(0).gameObject);
        }
        // Destroy this script/
        Destroy(this);
    }
コード例 #4
0
    void Hit(GameObject Temp_Object, Vector3 Temp_Normal)
    {
        Live_Flag = false;
        if (Type == 1)
        { // HE
            Destroy(GetComponent <Renderer>());
            Destroy(GetComponent <Rigidbody>());
            Destroy(GetComponent <Collider>());
            // Create HE Explosion Particle.
            if (Explosion_Object)
            {
                Instantiate(Explosion_Object, This_Transform.position, Quaternion.identity);
            }
        }


        // Send Message
        if (Temp_Object)
        {
            Damage_Control_CS Temp_Script = Temp_Object.GetComponent <Damage_Control_CS>();
            if (Temp_Script)
            {     // Hit object has "Damage_Control" script.
                if (Type == 0)
                { // AP
                  // Create AP Ricochet Particle.
                    if (Ricochet_Object)
                    {
                        Instantiate(Ricochet_Object, This_Transform.position, Quaternion.identity);
                    }
                    // Calculate Hit_Energy.
                    float Hit_Angle  = Mathf.Abs(90.0f - Vector3.Angle(This_Rigidbody.velocity, Temp_Normal));
                    float Hit_Energy = 0.5f * This_Rigidbody.mass * Mathf.Pow(This_Rigidbody.velocity.magnitude, 2);
                    Hit_Energy *= Mathf.Lerp(0.0f, 1.0f, Mathf.Sqrt(Hit_Angle / 90.0f));
                    Hit_Energy *= Attack_Multiplier;
                    // Output for debug.
                    if (Debug_Flag)
                    {
                        Debug.Log("AP Damage " + Hit_Energy + " on " + Temp_Object.name);
                    }
                    // Send 'Hit_Energy' to "Damage_Control" script.
                    if (current_player == 1)
                    {
                        Destroy(this.gameObject);
                        return;
                    }

                    if (Temp_Script.Breaker(Hit_Energy))
                    {
                        Destroy(this.gameObject);
                    }
                }
                else
                { // HE
                    Explosion_Force *= Attack_Multiplier;
                    // Output for debug.
                    if (Debug_Flag)
                    {
                        Debug.Log("HE Damage " + Explosion_Force + " on " + Temp_Object.name);
                    }
                    // Send 'Explosion_Force' to "Damage_Control" script.
                    Temp_Script.Breaker(Explosion_Force);
                }
            }
            else
            {     // Hit object does not have "Damage_Control" script.
                if (Type == 0)
                { // AP
                  // Create AP Impact Particle.
                    if (Impact_Object)
                    {
                        Instantiate(Impact_Object, This_Transform.position, Quaternion.identity);
                    }
                }
            }
        }
        // Explosion process.
        if (Type == 1)
        { // HE
          // Search objects in the Explosion_Radius.
            Collider[] Temp_Colliders = Physics.OverlapSphere(This_Transform.position, Explosion_Radius);
            foreach (Collider Target_Collider in Temp_Colliders)
            {
                //StartCoroutine ( "Add_Explosion_Force" , Target_Collider ) ;
                Add_Explosion_Force(Target_Collider);
            }
            Destroy(this.gameObject, 0.01f * Explosion_Radius);
        }
    }
コード例 #5
0
    void Create()
    {
        MainBody_Object.GetComponent <Rigidbody>().mass   = Body_MassProp.floatValue;
        MainBody_Object.GetComponent <MeshFilter> ().mesh = Body_MeshProp.objectReferenceValue as Mesh;

        Material [] Temp_Materials = new Material [Materials_NumProp.intValue];
        for (int i = 0; i < Temp_Materials.Length; i++)
        {
            Temp_Materials [i] = MaterialsProp.GetArrayElementAtIndex(i).objectReferenceValue as Material;
        }
        MainBody_Object.GetComponent <Renderer>().materials = Temp_Materials;

        MeshCollider[] Temp_MeshColliders;
        Temp_MeshColliders = MainBody_Object.GetComponents <MeshCollider> ();
        MeshCollider Main_MeshCollider;
        MeshCollider Sub_MeshCollider;

        switch (Temp_MeshColliders.Length)
        {
        case 0:
            Main_MeshCollider = MainBody_Object.AddComponent <MeshCollider> ();
            Sub_MeshCollider  = MainBody_Object.AddComponent <MeshCollider> ();
            break;

        case 1:
            Main_MeshCollider = Temp_MeshColliders [0] as MeshCollider;
            Sub_MeshCollider  = MainBody_Object.AddComponent <MeshCollider> ();
            break;

        default:
            Main_MeshCollider = Temp_MeshColliders [0] as MeshCollider;
            Sub_MeshCollider  = Temp_MeshColliders [1] as MeshCollider;
            break;
        }
        if (Collider_MeshProp.objectReferenceValue)
        {
            Main_MeshCollider.enabled    = true;
            Main_MeshCollider.sharedMesh = Collider_MeshProp.objectReferenceValue as Mesh;
            Main_MeshCollider.convex     = true;
        }
        else
        {
            Main_MeshCollider.enabled = false;
        }
        if (Sub_Collider_MeshProp.objectReferenceValue)
        {
            Sub_MeshCollider.enabled    = true;
            Sub_MeshCollider.sharedMesh = Sub_Collider_MeshProp.objectReferenceValue as Mesh;
            Sub_MeshCollider.convex     = true;
        }
        else
        {
            Sub_MeshCollider.enabled = false;
        }
        // Add script
        Damage_Control_CS Temp_Damage_Control_CS = MainBody_Object.GetComponent <Damage_Control_CS> ();

        if (Temp_Damage_Control_CS == null)
        {
            Temp_Damage_Control_CS = MainBody_Object.AddComponent <Damage_Control_CS> ();
        }
        Temp_Damage_Control_CS.Type          = 5;  // 5 = MainBody in "Damage_Control"
        Temp_Damage_Control_CS.Durability    = DurabilityProp.floatValue;
        Temp_Damage_Control_CS.Turret_Number = Turret_NumberProp.intValue;
        // Set Layer.
        MainBody_Object.layer = 11;          // Ignore wheels.
    }