private void AddTargetToList(TargetEnemy targetable) { if (!targetsInRange.Contains(targetable)) { targetsInRange.Add(targetable); } }
void Update() { switch (cStatus) { case Status.None: break; case Status.Idle: break; case Status.Attack: iTween.RotateUpdate(gameObject, iTween.Hash("rotation", new Vector3(0, 0, GetAngle(transform.position, TargetEnemy.GetTransform().position)), "speed", AttackSpeed * 300.0f)); anm.timeScale = AttackSpeed; anm.AnimationState.Event += HandleEvent; CheckDistance(transform.position, TargetEnemy.GetTransform().position, Range); break; case Status.Skill: break; case Status.Dead: anm.AnimationName = "death"; anm.loop = false; break; default: break; } }
void Explode() { GameObject explode = Instantiate(explodeEffect, transform.position, transform.rotation); Destroy(explode, 2f); Collider[] colliderToDestroy = Physics.OverlapSphere(transform.position, radius); foreach (Collider nearBy in colliderToDestroy) { Target target = nearBy.GetComponent <Target>(); TargetEnemy enemyTarget = nearBy.GetComponent <TargetEnemy>(); if (enemyTarget != null) { enemyTarget.HitEnemy(damage); } if (target != null) { target.HitTarget(damage); } } Collider[] colliderToForce = Physics.OverlapSphere(transform.position, radius); foreach (Collider nearBy in colliderToForce) { Rigidbody rb = nearBy.GetComponent <Rigidbody>(); if (rb != null) { rb.AddExplosionForce(force, transform.position, radius); } } Destroy(gameObject); }
void OnSceneGUI() { if (EditorOption.Options[OptionType.디버그_라인그리기] == false) { return; } TargetEnemy item = (TargetEnemy)target; Transform tr = item.transform; item.viewingDistance = (float)Handles.ScaleValueHandle(item.viewingDistance , tr.position + tr.forward * item.viewingDistance , tr.rotation, 1, Handles.ConeHandleCap, 1); if (item.handle1) { // 로테이션 핸들 1) item.viewingAngle = Handles.ScaleSlider(item.viewingAngle, tr.position + tr.forward * item.viewingDistance, tr.right, Quaternion.identity, 2, 0.1f); } if (item.handle2) { // 로테이션 핸들 2) Quaternion rotate = Quaternion.Euler(new Vector3(0, item.viewingAngle, 0)); rotate = Handles.FreeRotateHandle(rotate, tr.position, item.viewingDistance); item.viewingAngle = rotate.eulerAngles.y; } if (item.handle3) { //로테이션 핸들 3) Quaternion rotate = Quaternion.Euler(new Vector3(0, item.viewingAngle, 0)); rotate = Handles.RotationHandle(rotate, tr.position); item.viewingAngle = rotate.eulerAngles.y; } }
void OnTriggerEnter2D(Collider2D col) { if (col.tag == "Boss" || col.tag == "Crit") { Target enemy = col.GetComponent <Target>(); if (enemy != null) { cam.GetComponent <CameraShake>().shakecamera(); enemy.TakeDamage(damage); SumScore.Add(5); } } if (col.tag == "Enemy") { TargetEnemy enemy = col.GetComponent <TargetEnemy>(); if (enemy != null) { cam.GetComponent <CameraShake>().shakecamera(); enemy.TakeDamage(damage); SumScore.Add(5); } } if (col.tag == "EnemyBullet") { SumScore.Add(1); } Destroy(gameObject); }
private void OnDeath() { _isDead = true; _explosionParticles.transform.position = transform.position; _explosionParticles.gameObject.SetActive(true); _explosionParticles.Play(); ExplosionAudio.Play(); if (gameObject.tag == "Player") { GameManager.GameOver(); } else { TargetEnemy.VisibleEnemies.Remove(gameObject.GetComponent <EnemyInView>()); TargetEnemy.TurnOffLockOn(); GameManager.EnemyKilled(); } this.gameObject.SetActive(false); }
protected sealed override void OnCollideWithEnemy(Enemy enemy, Vector3 hitPosition) { Head.HitEnemies.Add(enemy); if (TargetEnemy.IsTarget(enemy) && enemy.FullDamageOnSmite) { enemy.TrueDamage(DamageOnHitTarget, this); DeactivateAllLinks(); } }
// 공격 public override void Attack() { TargetEnemy.Damage(AttackDamage); if (!TargetEnemy.isAlive()) { SetIdle(); } // 스킬 카운트 Count++; }
public void InitFromPreviousLink(SmiteBullet existingLink) { Previous = existingLink; Head = existingLink.Head; DamageOnHitAny = existingLink.DamageOnHitAny; DamageOnHitTarget = existingLink.DamageOnHitTarget; TargetEnemy.CloneFrom(existingLink.TargetEnemy); TargetPosition = existingLink.TargetPosition; if (!TargetEnemy.IsActive) { TargetPosition = TargetPosition.WithY(SpaceUtil.WorldMap.Top.y); } }
void Shoot() { // A simple fire animation using particals. gunSmoke.Play(); // Raycast for targeting purposes. RaycastHit rayHit; // Player Player forward Going out to range if (Physics.Raycast(transform.position, transform.forward, out rayHit)) { range = rayHit.distance; } { // Set up target. What the ray hit. Target target = rayHit.transform.GetComponent <Target>(); TargetEnemy enemyTarget = rayHit.transform.GetComponent <TargetEnemy>(); TargetBase baseTarget = rayHit.transform.GetComponent <TargetBase>(); TargetTank tankTarget = rayHit.transform.GetComponent <TargetTank>(); //GameObject hitHere = Instantiate(hitEffect, transform.position + transform.forward * range, Quaternion.LookRotation(rayHit.point)); GameObject hitHere = Instantiate(hitEffect, rayHit.point, Quaternion.LookRotation(rayHit.normal)); Destroy(hitHere, 0.5f); Debug.DrawLine(transform.position, transform.position + transform.forward * range, Color.red); // Show me what the ray hit. // Debug.Log(rayHit.transform.name); if (enemyTarget != null) { // Target takes damage. enemyTarget.HitEnemy(damage); } // Only if targe is not zero, a valid targe is in range. if (target != null) { // Target takes damage. target.HitTarget(damage); } if (baseTarget != null) { baseTarget.HitBase(damage); } if (tankTarget != null) { tankTarget.HitBase(damage); } } }
private void RemoveTargetFromList(TargetEnemy targetable) { if (targetsInRange.Contains(targetable)) { targetsInRange.Remove(targetable); } if (targetsInCone.Contains(targetable)) { targetsInCone.Remove(targetable); } if (aimController.Target == targetable) { aimController.Target = null; TryGetTargetFormList(); } }
private void OnTriggerExit(Collider other) { TargetEnemy targetable = null; if (other.attachedRigidbody) { targetable = other.attachedRigidbody.GetComponentInChildren <TargetEnemy>(); } else { targetable = other.GetComponentInChildren <TargetEnemy>(); } if (targetable != null) { RemoveTargetFromList(targetable); } }
// 탐색 레이더. 나중에 부모클래스로 빼줘야하고 애니메이션 이름 통일 public IEnumerator Rader() { AngleZ = 0.0f; while (true) { // 레이 쏘는 방향 뱅글뱅글 AngleZ += 1440.0f * Time.deltaTime; Detector = (Quaternion.Euler(0.0f, 0.0f, AngleZ) * Vector3.down * Range) + transform.position; Debug.DrawLine(transform.position, Detector, Color.red, 0.1f); hit = Physics2D.Linecast(transform.position, Detector, 1 << LayerMask.NameToLayer("Enemy")); if (hit) { TargetEnemy = (IDamageable)hit.transform.GetComponent(typeof(IDamageable)); // 유효한 타겟인가? if (TargetEnemy.isAlive()) { cStatus = Status.Attack; anm.AnimationName = "heal"; yield break; } else { SetIdle(); } } else { if (cStatus == Status.Attack) { SetIdle(); } } yield return(null); } }
void Laser() { TargetEnemy.TakeDamage(damageOverTime * Time.deltaTime); TargetEnemy.Slow(slowAmount); if (!LineRenderer.enabled) { LineRenderer.enabled = true; impactEffect.Play(); impactLight.enabled = true; } LineRenderer.SetPosition(0, firePoint.position); LineRenderer.SetPosition(1, Target.position); Vector3 dir = firePoint.position - Target.position; // vector3 for the impactEffect impactEffect.transform.position = Target.position + dir.normalized; impactEffect.transform.rotation = Quaternion.LookRotation(dir); }
private bool AnyBoundInsideCone(TargetEnemy target) { List <Vector3> bounds = target.GetBoundsList(); foreach (var bound in bounds) { Vector3 dir = (bound - transform.position).normalized; float dot = Vector3.Dot(transform.forward, dir); float cos = Mathf.Cos(angle / 2f * Mathf.Deg2Rad); if (dot > cos) { return(true); } } return(false); // Vector3 dir = (target.Transform.position - transform.position).normalized; // float dot = Vector3.Dot(transform.forward, dir); // float cos = Mathf.Cos(angle / 2f * Mathf.Deg2Rad); //return dot > cos; }
// 콜백함수. 이벤트 발생시 호출됨 void HandleEvent(Spine.TrackEntry trackEntry, Spine.Event e) { // 정확히 타격 판정이 발생하는 부분 if (e.Data.Name == "hit" && !isAttacked) { print("event hitttttt"); Attack(); isAttacked = true; } // 공격 후 if (e.Data.Name == "end attack" && isAttacked) { print("end Attack"); // 적이 아직 사거리 내에 있는지 확인 if (TargetEnemy.isAlive()) { CheckDistance(transform.position, TargetEnemy.GetTransform().position, Range); } isAttacked = false; } }
void Update() { switch (cStatus) { case Status.None: break; case Status.Idle: break; case Status.Attack: iTween.RotateUpdate(gameObject, iTween.Hash("rotation", new Vector3(0, 0, GetAngle(transform.position, TargetEnemy.GetTransform().position)), "time", 0.5f)); anm.AnimationState.Event += HandleEvent; break; case Status.Skill: break; case Status.Dead: anm.AnimationName = "death"; anm.loop = false; break; default: break; } }