Exemplo n.º 1
0
    // Use this for initialization
    void Start()
    {
        ecZ = GetComponent<Enemy_ControllerZ>();
        at_para = Bullet.GetComponent<Attack_Parameter>();
        animator = GetComponentInChildren<Animator>();

        Player = GameObject.FindWithTag ("Player").transform;
    }
    // Use this for initialization
    void Start()
    {
        self_state = Self_State_Enmu.move;

        animator = GetComponent<Animator>();

        self = GetComponent<Transform>();

        rigidbody = GetComponent<Rigidbody>();
        rigidbody.mass = 3.0f;
        //rigidbody.constraints = RigidbodyConstraints.FreezeRotation;

        bones = GetComponentsInChildren<Transform>() as Transform[];

        camRot = self.rotation;

        foreach (Transform t in bones)
        {
            if (t.GetComponent<Rigidbody>() && t.GetComponent<Rigidbody>() != rigidbody)
                t.GetComponent<Rigidbody>().isKinematic = true;
            if (t.GetComponent<Collider>() && t.GetComponent<Collider>() != self.GetComponent<Collider>())
                t.GetComponent<Collider>().isTrigger = true;
        }

        if (headBone == null)
        {
            foreach (Transform t in bones)
            {
                if (t.name == "head")
                    headBone = t;
            }
        }

        if (weapons.sword_Hand) weapons.sword_Hand.GetComponent<Renderer>().enabled = false;
        if (weapons.sword_Holster) weapons.sword_Holster.GetComponent<Renderer>().enabled = true; // On
        if (weapons.bow_Hand) weapons.bow_Hand.GetComponent<Renderer>().enabled = false;
        if (weapons.bow_Holster) weapons.bow_Holster.GetComponent<Renderer>().enabled = false;
        if (weapons.bow_Quiver) weapons.bow_Quiver.GetComponent<Renderer>().enabled = false;
        if (weapons.rifle_Hand) weapons.rifle_Hand.GetComponent<Renderer>().enabled = false;
        if (weapons.rifle_Holster) weapons.rifle_Holster.GetComponent<Renderer>().enabled = false;
        if (weapons.pistol_Hand) weapons.pistol_Hand.GetComponent<Renderer>().enabled = false;
        if (weapons.pistol_Holster) weapons.pistol_Holster.GetComponent<Renderer>().enabled = false;

        self_attack_parameter = new Attack_Parameter();

        animator.SetLayerWeight(1, 1f);

        navMeshAgent = transform.parent.GetComponent<NavMeshAgent>();

        enemy = GameObject.Find("hero");
        animator = GetComponent<Animator>();

        IEnumerator custom_nav_Coroutine = Timer.Timer_IEnumerator(0.5f, custom_nav_fuc);

        StartCoroutine(custom_nav_Coroutine);
    }
Exemplo n.º 3
0
 // Use this for initialization
 void Start()
 {
     vision = GameObject.FindGameObjectWithTag("Player").GetComponentInChildren<Vision>();
     At = GetComponent<Attack_Parameter>();
     oldTarget = vision.nearTarget;
 }
Exemplo n.º 4
0
    void OnTriggerEnter(Collider col)
    {
        if (col.tag == "Bullet")
        {//タグ"Bullet"が攻撃
            //当たった弾の攻撃力取得
            Attack_Parameter attack = col.gameObject.GetComponent <Attack_Parameter>();

            if (attack.Parent.name != Parent.name)
            {
                //ダメージ処理///////////////////////////////////////////////////////////////

                int damage = attack.power;

                //弱点属性でダメージ2倍
                for (int i = 0; i < Cpara.weak_element.Length; i++)
                {
                    if (attack.GetElement() == Cpara.weak_element[i])
                    {
                        damage *= 2;
                    }
                }

                //耐性属性でダメージ1/2倍
                for (int i = 0; i < Cpara.proof_element.Length; i++)
                {
                    if (attack.GetElement() == Cpara.proof_element[i])
                    {
                        damage /= 2;
                    }
                }

                //無効化属性でダメージ0
                for (int i = 0; i < Cpara.invalid_element.Length; i++)
                {
                    if (attack.GetElement() == Cpara.invalid_element[i])
                    {
                        damage = 0;
                    }
                }

                //弱点部位でダメージ2倍
                if (weak_point)
                {
                    damage *= 2;
                }

                //実際のダメージ処理
                if (Cpara.GetF_Damage())
                {
                    Cpara.H_point -= damage;
                    Audio_Source.PlayOneShot(Audio_Source.clip);                         //ダメージ音
                    StartCoroutine(DamageEffects());
                    Cpara.SendMessage("Damage", SendMessageOptions.DontRequireReceiver); //とりあえずダメージを受けたことを知らせる
                    ReverseDamage();                                                     //ダメージを連続で受けないようにする
                    //StartCoroutine(Blink());
                    Invoke("ReverseDamage", 0.5f);
                }

                //こっから演出////////////////////////////////////////////////////////////////

                //属性エフェクト
                //switch (col.GetComponent<Attack_Parameter>().GetElement())
                //{
                //    case Attack_Parameter.MagicElement.Earth:
                //        //effectKind = EffectKind.Earth;
                //        break;
                //    case Attack_Parameter.MagicElement.Water:
                //        effectKind = EffectKind.Water;
                //        break;
                //    case Attack_Parameter.MagicElement.Fire:
                //        effectKind = EffectKind.Fire;
                //        break;
                //    case Attack_Parameter.MagicElement.Wind:
                //        //effectKind = EffectKind.Wind;
                //        break;

                //}
                //Effects[(int)effectKind].transform.position = col.transform.position;//弾が当たった場所
                ////一瞬だけ消してつけるともう一回再生してくれる
                //Effects[(int)effectKind].SetActive(false);
                //Effects[(int)effectKind].SetActive(true);

                //どしゅ
                Effects[(int)EffectKind.Hit].transform.position = col.transform.position;//弾が当たった場所

                //一瞬だけ消してつけるともう一回再生してくれる
                Effects[(int)EffectKind.Hit].SetActive(false);
                Effects[(int)EffectKind.Hit].SetActive(true);
            }

            //こっから状態異常///////////////////////////////////////////////////////////

            //ノックバック
            if (attack.GetKnockBack().magnitude > 0)
            {
                Cpara.ReverseKnock();//ノックバック状態ですよ

                //vec2をvec1に向かって角度差分だけ回転させる
                var vec1 = (Parent.gameObject.transform.position - col.gameObject.transform.position);
                var vec2 = attack.GetKnockBack();
                //Y軸は別計算で
                vec1 = new Vector3(vec1.x, 0, vec1.z).normalized;
                vec2 = new Vector3(vec2.x, 0, vec2.z).normalized;

                var axis = Vector3.Cross(vec2, vec1);                                                                 //2つのベクトルに直行するベクトルを求める(外積)
                var ang  = Quaternion.LookRotation(vec2).eulerAngles.y - Quaternion.LookRotation(vec1).eulerAngles.y; //二つのベクトルの角度差
                var res  = Vector3.zero;                                                                              //吹っ飛ぶ方向

                if (ang > -180)
                {
                    res = Quaternion.AngleAxis(-ang, axis) * attack.GetKnockBack();//axisを軸にして第1引数の角度だけ回転させる
                }
                else
                {
                    res = Quaternion.AngleAxis(ang, axis) * attack.GetKnockBack();//axisを軸にして第1引数の角度だけ回転させる
                }

                //吹っ飛ぶ
                iTween.MoveTo(Parent.gameObject, iTween.Hash(
                                  "position", new Vector3(
                                      Parent.gameObject.transform.position.x + res.x,
                                      Parent.gameObject.transform.position.y + attack.GetKnockBack().y,
                                      Parent.gameObject.transform.position.z + res.z)

                                  /*Parent.gameObject.transform.position.x - (col.gameObject.transform.position.x - Parent.gameObject.transform.position.x) * attack.GetKnockBack().x,
                                  *  Parent.gameObject.transform.position.y + attack.GetKnockBack().y,
                                  *  Parent.gameObject.transform.position.z - (col.gameObject.transform.position.z - Parent.gameObject.transform.position.z) * attack.GetKnockBack().z)*/
                                  //- (col.gameObject.transform.position - Parent.gameObject.transform.position)
                                  /*Parent.transform.TransformDirection(attack.GetKnockBack())*/,
                                  "time", 0.3f /*,
                                                * "easetype", iTween.EaseType.easeOutBack*/)
                              );
                Cpara.SetKeylock();//行動不能だったと思う
            }

            //毒
            if (attack.GetAilment() == Attack_Parameter.Ailment.Poison)
            {
                if (!Cpara.flag_poison)//毒状態は重ならない
                {
                    Cpara.flag_poison = true;
                    Effects[(int)EffectKind.Poison].SetActive(true);
                    StartCoroutine(Poison());//一回動かせばいい
                }
            }
        }
    }