// 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); } }
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); } } } } }
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); }
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; }
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); } }
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); }
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()); } } }
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(); }
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; }