Пример #1
0
 // Update is called once per frame
 void Update()
 {
     if (FlagScore.id < 0)
     {
         players = GameObject.FindGameObjectsWithTag("Player");
         if (players.Length == 0)
         {
             return;
         }
         GameObject cloest   = null;
         float      distance = 100;
         for (int i = 0; i < players.Length; i++)
         {
             PlayerHitten playerHitten = players[i].GetComponent <PlayerHitten>();
             float        d            = Vector3.Distance(transform.position, playerHitten.Hips.position);
             if (d < distance)
             {
                 cloest   = players[i];
                 distance = d;
             }
         }
         nav.SetDestination(cloest.GetComponent <PlayerHitten>().Hips.position);
     }
     else
     {
         nav.SetDestination(FlagScore.follow.position);
     }
 }
Пример #2
0
    private void OnTriggerStay(Collider other)
    {
        if (!IsAttacking)
        {
            return;
        }
        if ((layerMask.value & 1 << other.gameObject.layer) > 0)
        {
            if (other.gameObject.transform.root.GetComponent <PlayerHitten>())
            {
                if (other.gameObject.transform.root.GetComponent <PlayerIdentity>().PlayerID == PlayerID)
                {
                    return;
                }
                PlayerHitten     hitten        = other.gameObject.transform.root.GetComponent <PlayerHitten>();
                BulletHitInfo_AF bulletHitInfo = new BulletHitInfo_AF();
                bulletHitInfo.hitTransform = other.transform;
                bulletHitInfo.bulletForce  = (other.ClosestPoint(transform.position) - transform.position).normalized * velocity;
                // bulletHitInfo.hitNormal = raycastHit.normal;
                bulletHitInfo.hitPoint = other.ClosestPoint(transform.position);

                if (!playerHittens.Contains(hitten))
                {
                    hitten.OnDamaged(damage, PlayerID);
                    hitten.OnHit(bulletHitInfo);
                    playerHittens.Add(hitten);
                    Instantiate(HitParticle, bulletHitInfo.hitPoint, Quaternion.identity);
                    audioSource.PlayOneShot(HitSFX, volume);
                }
            }
            else if (other.gameObject.transform.root.GetComponent <CreatureBasic>())
            {
                other.gameObject.transform.root.GetComponent <CreatureBasic>().Death();
                other.GetComponent <Rigidbody>().AddForceAtPosition((other.ClosestPoint(transform.position) - transform.position).normalized * velocity * 2, other.ClosestPoint(transform.position));
                Instantiate(HitParticle, other.ClosestPoint(transform.position), Quaternion.identity);
                audioSource.PlayOneShot(HitSFX, volume);
            }


            if (other.gameObject.tag == "Item")
            {
                if (other.gameObject.GetComponent <ItemBasic>())
                {
                    ItemBasic itemBasic = other.gameObject.GetComponent <ItemBasic>();

                    // 記得取消
                    // itemBasic.OnUse();

                    if (!itemBasic.IsHolded)
                    {
                        BulletHitInfo_AF bulletHitInfo = new BulletHitInfo_AF();
                        bulletHitInfo.hitTransform = other.transform;
                        bulletHitInfo.bulletForce  = (other.ClosestPoint(transform.position) - transform.position).normalized * velocity / 30;
                        bulletHitInfo.hitPoint     = other.ClosestPoint(transform.position);
                        itemBasic.AddForce(bulletHitInfo);
                    }
                }
            }
        }
    }
Пример #3
0
    IEnumerator explosion()
    {
        yield return(new WaitForSecondsRealtime(delay));

        Collider[] colliders = Physics.OverlapSphere(transform.position, radius, layerMask);

        BulletHitInfo_AF bulletHitInfo = new BulletHitInfo_AF();

        foreach (Collider collider in colliders)
        {
            if ((layerMask.value & 1 << collider.gameObject.layer) > 0)
            {
                if (collider.gameObject.transform.root.GetComponent <PlayerHitten>())
                {
                    PlayerHitten hitten = collider.gameObject.transform.root.GetComponent <PlayerHitten>();
                    bulletHitInfo.hitTransform = collider.transform;
                    bulletHitInfo.bulletForce  = (collider.ClosestPoint(transform.position) - transform.position).normalized * velocity;
                    // bulletHitInfo.hitNormal = raycastHit.normal;
                    bulletHitInfo.hitPoint = collider.ClosestPoint(transform.position);

                    if (!playerHittens.Contains(hitten))
                    {
                        hitten.OnDamaged(damage, PlayerID);
                    }

                    hitten.OnHit(bulletHitInfo);

                    playerHittens.Add(hitten);
                }
                else if (collider.gameObject.transform.root.GetComponent <CreatureBasic>())
                {
                    collider.gameObject.transform.root.GetComponent <CreatureBasic>().Death();
                    collider.GetComponent <Rigidbody>().AddForceAtPosition((collider.ClosestPoint(transform.position) - transform.position).normalized * velocity * 2, collider.ClosestPoint(transform.position));
                }
            }

            if (collider.gameObject.tag == "Item")
            {
                Debug.Log(collider.gameObject.name);
                if (collider.gameObject.GetComponent <ItemBasic>())
                {
                    ItemBasic itemBasic = collider.gameObject.GetComponent <ItemBasic>();

                    // 記得取消
                    // itemBasic.OnUse();

                    if (itemBasic.IsHolded)
                    {
                        continue;
                    }
                    bulletHitInfo.hitTransform = collider.transform;
                    bulletHitInfo.bulletForce  = (collider.ClosestPoint(transform.position) - transform.position).normalized * velocity;
                    bulletHitInfo.hitPoint     = collider.ClosestPoint(transform.position);
                    itemBasic.AddForce(bulletHitInfo);
                }
            }
        }
        yield return(null);
    }
Пример #4
0
 public void SetUp(PlayerHitten _playerHitten)
 {
     Debug.Log("A");
     playerHitten = _playerHitten;
     follow       = playerHitten.playerMove.transform;
     _playerHitten.OnHealthChanged += OnPlayerHealthChanged;
     slider.maxValue = _playerHitten.GetMaxHealth();
     slider.value    = slider.maxValue;
 }
Пример #5
0
 void OnPlayerHealthChanged(PlayerHitten playerHitten, float oldHP, float newHP)
 {
     slider.value = newHP;
     if (slider.normalizedValue >= 0.5f)
     {
         float OldRange = (1 - 0.5f);
         float NewRange = (1 - 0);
         float NewValue = (((slider.normalizedValue - 0.5f) * NewRange) / OldRange) + 0;
         Fill.color = Color.Lerp(HalfHealth, FullHealth, NewValue);
     }
     else
     {
         float OldRange = (0.5f - 0);
         float NewRange = (1 - 0f);
         float NewValue = (((slider.normalizedValue - 0) * NewRange) / OldRange) - 0.8f;
         Fill.color = Color.Lerp(LowHealth, HalfHealth, NewValue);
     }
 }
Пример #6
0
    void SetTarget()
    {
        GameObject cloest   = null;
        float      distance = 100;

        for (int i = 0; i < StageManager.players.Count; i++)
        {
            PlayerHitten playerHitten = StageManager.players[i].GetComponent <PlayerHitten>();
            float        d            = Vector3.Distance(transform.position, playerHitten.Hips.position);
            if (d < distance)
            {
                cloest   = StageManager.players[i];
                distance = d;
            }
        }
        following = cloest.GetComponent <PlayerHitten>().Hips.position;
        nav.SetDestination(cloest.GetComponent <PlayerHitten>().Hips.position);
    }
Пример #7
0
    public virtual void OnPlayerDeath(PlayerHitten playerHitten)
    {
        int num = playerHittens.IndexOf(playerHitten);

        Lifes[num]--;
        UIs[num].GetComponentInChildren <TextMeshProUGUI>().text = Lifes[num].ToString();
        Debug.Log(Lifes[num].ToString());
        if (Lifes[num] <= 0)
        {
            UIs[num].GetComponentInChildren <TextMeshProUGUI>().color = Color.red;
            playerHitten.SetRespawnable(false);
            StageManager.RemoveCameraTarget(playerHitten.playerMove.transform);
            DeadPlayer.Add(num);
            if (DeadPlayer.Count >= Lifes.Count - 1)
            {
                Finish.Play();
                StartCoroutine(_FinishEvent());
            }
        }
    }
Пример #8
0
    public override void OnPlayerDeath(PlayerHitten playerHitten)
    {
        if (IsEnd)
        {
            Debug.Log(IsEnd);
            return;
        }
        int num = playerHitten.LastDamagedID;

        if (num == -1)
        {
            num = playerHittens.IndexOf(playerHitten);
            Lifes[num]--;
        }
        else
        {
            Debug.Log(num);
            Lifes[num]++;
        }
        UIs[num].GetComponentInChildren <TextMeshProUGUI>().text = Lifes[num].ToString();
    }
Пример #9
0
    private void OnTriggerEnter(Collider other)
    {
        Debug.Log(other.gameObject.name);
        if (time < CollisionDelay)
        {
            return;
        }
        if (!IsEnable)
        {
            return;
        }
        if (!((TargetMask.value & 1 << other.gameObject.layer) > 0))
        {
            return;
        }
        foreach (Basic_Bullet b in basic_Bullets)
        {
            if (b != null)
            {
                if (other.transform == b.transform)
                {
                    return;
                }
            }
        }

        BulletHitInfo_AF bulletHitInfo = new BulletHitInfo_AF();

        if ((PlayerMask.value & 1 << other.gameObject.layer) > 0)
        {
            if (other.gameObject.transform.root.GetComponent <PlayerHitten>())
            {
                PlayerHitten hitten = other.gameObject.transform.root.GetComponent <PlayerHitten>();
                bulletHitInfo.hitTransform = other.transform;
                bulletHitInfo.bulletForce  = (other.ClosestPoint(transform.position) - transform.position).normalized * velocity;
                // bulletHitInfo.hitNormal = raycastHit.normal;
                bulletHitInfo.hitPoint = other.ClosestPoint(transform.position);

                if (!playerHittens.Contains(hitten))
                {
                    hitten.OnDamaged(damage, PlayerID);
                    hitten.OnHit(bulletHitInfo);
                    playerHittens.Add(hitten);
                }
            }
        }
        else
        {
            if (other.gameObject.transform.root.GetComponent <CreatureBasic>())
            {
                CreatureBasic creatureBasic = other.gameObject.transform.root.GetComponent <CreatureBasic>();
                creatureBasic.Death();
            }
            other.GetComponent <Rigidbody>().AddForceAtPosition((other.ClosestPoint(transform.position) - transform.position).normalized * velocity, other.ClosestPoint(transform.position));
        }
        GameObject g = Instantiate(CollisionEffect, transform.position, transform.rotation);

        Destroy(g, 2f);
        Destroy(this.gameObject, DestroyAfterCollision);
        rb.isKinematic = true;
        IsEnable       = false;
    }