private void ShootLaser() { // enable collision w stage and player (in default layer) int playerMask = 1 << LayerMask.NameToLayer("Default"); int stageMask = 1 << LayerMask.NameToLayer("Stage"); int layerMask = playerMask | stageMask; Vector3 eyeToPlayer = _playerTransform.position - _eyeTransform.position + new Vector3(0f, 0.5f, 0f); RaycastHit hit; // if (Physics.SphereCast(transform.TransformVector(_eyeTransform.position), 0.2f, transform.TransformVector(_headTransform.forward), out hit, Mathf.Infinity, layerMask)) if (Physics.Raycast(transform.TransformVector(_eyeTransform.position), transform.TransformVector(_headTransform.forward), out hit, Mathf.Infinity, layerMask)) { _attackLaser.SetPosition(1, _eyeTransform.InverseTransformPoint(hit.point)); _attackLaser.gameObject.SetActive(true); if (hit.transform.gameObject.name == "Player") { hit.transform.gameObject.GetComponent <Health>().TakeDamage(1f, gameObject); } } else { _attackLaser.SetPosition(1, _eyeTransform.position + _headTransform.forward * _laserLength); _attackLaser.gameObject.SetActive(true); } AudioUtility.CreateSFX(_attackClip, transform.position, AudioUtility.AudioGroups.EnemyAttack, 0.8f, 10f, 100f, 1f); }
private void OnCollisionEnter(Collision collision) { if (!IsHitValid(collision.collider)) { return; } Damageable damageable = collision.collider.GetComponent <Damageable>(); if (damageable) { damageable.InflictDamage(damage, false, m_ProjectileBase.owner); } ContactPoint contact = collision.contacts[0]; // impact vfx if (impactVFX) { GameObject impactVFXInstance = Instantiate(impactVFX, contact.point + (contact.normal * impactVFXSpawnOffset), Quaternion.LookRotation(contact.normal)); if (impactVFXLifetime > 0) { Destroy(impactVFXInstance.gameObject, impactVFXLifetime); } } // impact sfx if (impactSFXClip) { AudioUtility.CreateSFX(impactSFXClip, contact.point, AudioUtility.AudioGroups.Impact, 1f, 3f); } // Self Destruct Destroy(this.gameObject); }
void Start() { //spawn enemies every 5 frames _spawnInterval = 5f * Time.fixedDeltaTime; _durationOfSwarmerSpawns = (float)_spawnInterval * _numSwarmerSpawns; _centerStageTransform = Stage.Instance.transform.Find("CenterStage"); _playerTransform = GameObject.FindWithTag("Player").transform; //set initial position float displacementFromCenterStage = _displacementToRadiusRatio * Stage.Instance.radius; Vector2 randomPoint = GameFlowManager.Instance.currentRound <= 1 ? new Vector2(0, 1) : UnityEngine.Random.insideUnitCircle; Vector3 spawnPosition = new Vector3(randomPoint.normalized.x * displacementFromCenterStage, 0, randomPoint.normalized.y * displacementFromCenterStage); gameObject.transform.Translate(spawnPosition); //set initial eyeball rotation Vector3 awayFromPlayer = _eyeballTransform.position - _playerTransform.position; _eyeballTransform.rotation = Quaternion.LookRotation(awayFromPlayer); _health.onDamaged += HandleOnDamaged; _enemyAnimator.Stop(); _enemyAnimator.Play("TowerSpawn"); if (_spawnClip) { AudioUtility.CreateSFX(_spawnClip, transform.position, AudioUtility.AudioGroups.EnemySpawn, 0.6f, 5f, 500f, 0.75f); } }
void Start() { //spawn duration will last 2 secondss _spawnDuration = 2 * Time.fixedDeltaTime; //death duration will last 10 frames _deathDuration = 10f * Time.fixedDeltaTime; _maxForce = _maxVelocity / 3 * _rigidbody.mass / Time.fixedDeltaTime; _deltaThetaLook = _deltaTheta * 2f; _playerTransform = GameObject.FindWithTag("Player").transform.Find("Main Camera"); movesClockwise = UnityEngine.Random.value < 0.5 ? true : false; _enemyAnimator.Stop(); _enemyAnimator.Play("OrbiterSpawn"); gameObject.transform.Translate(initialPosition); _health.onDamaged += HandleOnDamaged; if (_spawnClip) { AudioUtility.CreateSFX(_spawnClip, transform.position, AudioUtility.AudioGroups.EnemySpawn, 0.6f, 30f, 500f, 0.4f); } }
void OnHit(Vector3 point, Vector3 normal, Collider collider) { // damage Destructable dest = collider.GetComponent <Destructable>(); if (dest) { dest.OnDie(); } // impact vfx if (impactVFX) { GameObject impactVFXInstance = Instantiate(impactVFX, point + (normal * impactVFXSpawnOffset), Quaternion.LookRotation(normal)); if (impactVFXLifetime > 0) { Destroy(impactVFXInstance.gameObject, impactVFXLifetime); } } // impact sfx if (impactSFXClip) { AudioUtility.CreateSFX(impactSFXClip, point, AudioUtility.AudioGroups.Impact, 1f, 3f); } // Self Destruct Destroy(this.gameObject); }
public override void DeathBehavior(float timeSpentInCurrentState) { if (timeSpentInCurrentState < Time.fixedDeltaTime) { _enemyAnimator.Stop(); _enemyAnimator.Play("OrbiterDeath"); //ignore all collision _rigidbody.detectCollisions = false; //move to DontHit layer (so that dying enemy doesn't get hit by projectiles) gameObject.layer = LayerMask.NameToLayer("DontHit"); _hitbox.layer = LayerMask.NameToLayer("DontHit"); if (_deathClip) { AudioUtility.CreateSFX(_deathClip, transform.position, AudioUtility.AudioGroups.EnemySpawn, 0.6f, 5f, 500f, 1f); } } //fade out idle audio during deathDuration (idle audio starts at volume 0.1) _mainAudioSource.volume = Mathf.Lerp(0.1f, 0f, (Time.time - timeSpentInCurrentState) / _deathDuration); if (timeSpentInCurrentState >= _deathDuration) { OnDeathComplete.Invoke(); } }
void Update() { // Reset the trigger flag if (BounceFlag) { BounceFlag = false; } Vector3 origin = transform.position; origin.y += HeightOffset; for (int i = 0; i < Angles.Length; i++) { Vector3 direction = GetDirectionFromAngle(Angles[i], Vector3.up, transform.forward); if (Physics.Raycast(origin, direction, out RaycastHit hit, RayDistance, CollisionLayer) && Time.time > resumeTime && !hasCollided && kart.LocalSpeed() > 0) { // If the hit normal is pointing up, then we don't want to bounce if (Vector3.Dot(hit.normal, Vector3.up) > 0.2f) { return; } // Calculate the incident vector of the kart colliding into whatever object Vector3 incidentVector = hit.point - origin; // Calculate the reflection vector using the incident vector of the collision Vector3 hitNormal = hit.normal.normalized; reflectionVector = incidentVector - 2 * Vector3.Dot(incidentVector, hitNormal) * hitNormal; reflectionVector.y = 0; kart.Rigidbody.velocity /= 2; // Apply the bounce impulse with the reflectionVector kart.Rigidbody.AddForce(reflectionVector.normalized * BounceFactor, ForceMode.Impulse); // Mark that the vehicle has collided and the reset time. kart.SetCanMove(false); BounceFlag = hasCollided = true; resumeTime = Time.time + PauseTime; if (BounceSound) { AudioUtility.CreateSFX(BounceSound, transform.position, AudioUtility.AudioGroups.Collision, 0f); } return; } } if (Time.time < resumeTime) { Vector3 targetPos = origin + reflectionVector; Vector3 direction = targetPos - origin; Quaternion targetRotation = Quaternion.LookRotation(direction); kart.transform.rotation = Quaternion.Slerp(kart.transform.rotation, targetRotation, RotationSpeed * Time.deltaTime); } }
private void OnDestroy() { if (GetComponentInParent <SpawnObjects>()) { GameObject VFX = Instantiate(this.VFX, transform.position, transform.rotation); VFX.GetComponent <ParticleSystem>().Play(); AudioUtility.CreateSFX(pickBox, transform.position, AudioUtility.AudioGroups.Pickup, 0f); Destroy(VFX, 2f); GetComponentInParent <SpawnObjects>().canInstantiate = true; } }
void OnHit(Vector3 point, Vector3 normal, Collider collider) { // damage if (areaOfDamage) { // area damage areaOfDamage.InflictDamageInArea(damage, point, hittableLayers, k_TriggerInteraction, m_ProjectileBase.owner); //area knockback Collider[] colliders = Physics.OverlapSphere(transform.position, areaOfDamage.areaOfEffectDistance); foreach (Collider obj in colliders) { Rigidbody rb = obj.GetComponent <Rigidbody>(); if (rb != null) { rb.AddExplosionForce(force, transform.position, areaOfDamage.areaOfEffectDistance); } } } else { // point damage Damageable damageable = collider.GetComponent <Damageable>(); if (damageable) { damageable.InflictDamage(damage, false, m_ProjectileBase.owner); } } // impact vfx if (impactVFX) { GameObject impactVFXInstance = Instantiate(impactVFX, point + (normal * impactVFXSpawnOffset), Quaternion.FromToRotation(point, normal)); if (impactVFXLifetime > 0) { Destroy(impactVFXInstance.gameObject, impactVFXLifetime); ////if can show decal //if (collider.gameObject.GetComponent<Renderer>().material != null) // collider.gameObject.GetComponent<BulletHitEffect>().Hit(point, normal, hitType); } } // impact sfx if (impactSFXClip) { AudioUtility.CreateSFX(impactSFXClip, point, AudioUtility.AudioGroups.Impact, 1f, 3f); } // Self Destruct Destroy(this.gameObject); }
private void OnTriggerEnter(Collider other) { if (other.tag == "Player") { Jumppack jumppack = other.GetComponent <Jumppack>(); jumppack.Enable(); if (pickupSFX) { AudioUtility.CreateSFX(pickupSFX, transform.position, AudioUtility.AudioGroups.Pickup, 0f); } Destroy(gameObject); } }
void OnHit(Vector3 point, Vector3 normal, Collider collider) { // damage if (areaOfDamage) { // area damage areaOfDamage.InflictDamageInArea(damage, point, hittableLayers, k_TriggerInteraction, m_ProjectileBase.owner); } else { // point damage Damageable damageable = collider.GetComponent <Damageable>(); if (damageable) { damageable.InflictDamage(damage, false, m_ProjectileBase.owner); } // turn light on CrystalLight crystalLight = collider.GetComponent <CrystalLight>(); if (crystalLight && _notFromEnemy) { if (crystalLight.IsToggleLaser()) { crystalLight.LightOn(); } } } // impact vfx if (impactVFX) { GameObject impactVFXInstance = Instantiate(impactVFX, point + (normal * impactVFXSpawnOffset), Quaternion.LookRotation(normal)); if (impactVFXLifetime > 0) { Destroy(impactVFXInstance.gameObject, impactVFXLifetime); } } // impact sfx if (impactSFXClip) { AudioUtility.CreateSFX(impactSFXClip, point, AudioUtility.AudioGroups.Impact, 1f, 3f); } // Self Destruct Destroy(this.gameObject); }
void OnHit(Vector3 point, Vector3 normal, Collider collider) { Damageable damageable = null; // damage if (areaOfDamage) { // area damage areaOfDamage.InflictDamageInArea(damage, point, hittableLayers, k_TriggerInteraction, m_ProjectileBase.owner); } else { // point damage damageable = collider.GetComponent <Damageable>(); if (damageable) { damageable.InflictDamage(damage, false, m_ProjectileBase.owner); m_ProjectileBase.OnHit(m_Velocity); } } // impact vfx if (impactVFX) { GameObject impactVFXInstance = Instantiate(impactVFX, point + (normal * impactVFXSpawnOffset), Quaternion.LookRotation(normal)); if (impactVFXLifetime > 0) { Destroy(impactVFXInstance.gameObject, impactVFXLifetime); } } // impact sfx if (impactSFXClip) { if (damageable && damageable.damageMultiplier > 0f) { AudioUtility.CreateSFX(damageSFXClip, point, AudioUtility.AudioGroups.Impact, 0.6f, 1f, 100f, 1f); } else { AudioUtility.CreateSFX(impactSFXClip, point, AudioUtility.AudioGroups.Impact, 1f, 3f, 5f); } } // Self Destruct Destroy(this.gameObject); }
void OnCollect() { if (CollectSound) { AudioUtility.CreateSFX(CollectSound, transform.position, AudioUtility.AudioGroups.Pickup, 0f); } if (spawnPrefabOnPickup) { var vfx = Instantiate(spawnPrefabOnPickup, CollectVFXSpawnPoint.position, Quaternion.identity); Destroy(vfx, destroySpawnPrefabDelay); } Objective.OnUnregisterPickup(this); //TimeManager.OnAdjustTime(TimeGained); //Destroy(gameObject, collectDuration); }
void OnHit(Vector3 point, Vector3 normal, Collider collider) { if (collider.gameObject.tag == "Player") { Health life = collider.GetComponent <Health>(); life.TakeDamage(damage, m_ProjectileBase.owner); } // damage if (areaOfDamage) { // area damage areaOfDamage.InflictDamageInArea(damage, point, hittableLayers, k_TriggerInteraction, m_ProjectileBase.owner); } else { // point damage Damageable damageable = collider.GetComponent <Damageable>(); if (damageable) { damageable.InflictDamage(damage, false, m_ProjectileBase.owner); } } // impact vfx if (impactVFX) { GameObject impactVFXInstance = Instantiate(impactVFX, point + (normal * impactVFXSpawnOffset), Quaternion.LookRotation(normal)); if (impactVFXLifetime > 0) { Destroy(impactVFXInstance.gameObject, impactVFXLifetime); } } // impact sfx if (impactSFXClip) { AudioUtility.CreateSFX(impactSFXClip, point, AudioUtility.AudioGroups.Impact, 1f, 3f); } // Self Destruct Destroy(this.gameObject); }
void OnDetectedTarget() { if (AiState == AIState.Patrol) { AiState = AIState.Follow; } for (int i = 0; i < OnDetectVfx.Length; i++) { OnDetectVfx[i].Play(); } if (OnDetectSfx) { AudioUtility.CreateSFX(OnDetectSfx, transform.position, AudioUtility.AudioGroups.EnemyDetection, 1f); } Animator.SetBool(k_AnimAlertedParameter, true); }
void OnDetectedTarget() { if (aiState == AIState.Patrol) { aiState = AIState.Follow; } for (int i = 0; i < onDetectVFX.Length; i++) { onDetectVFX[i].Play(); } if (onDetectSFX) { AudioUtility.CreateSFX(onDetectSFX, transform.position, AudioUtility.AudioGroups.EnemyDetection, 1f); } // animator.SetBool(k_AnimAlertedParameter, true); }
public void PlayPickupFeedback() { if (m_HasPlayedFeedback) { return; } if (pickupSFX) { AudioUtility.CreateSFX(pickupSFX, transform.position, AudioUtility.AudioGroups.Pickup, 0f); } if (pickupVFXPrefab) { var pickupVFXInstance = Instantiate(pickupVFXPrefab, transform.position, Quaternion.identity); } m_HasPlayedFeedback = true; }
// Start is called before the first frame update void Start() { GameObject playerGameObject = GameObject.FindWithTag("Player"); _playerTransform = playerGameObject.transform; _aimLaserRenderer = _aimLaser.gameObject.GetComponent <Renderer>(); _centerStageTransform = Stage.Instance.transform.Find("CenterStage"); //set deltaThetaHead such that the rotation of the golem's head is enough to follow player.MaxSpeedOnGround when player is _aimFollowsPlayerDistance units away from golem float playerMaxSpeedOnGround = playerGameObject.GetComponent <PlayerCharacterController>().maxSpeedOnGround; _deltaThetaHead = (float)Mathf.Atan((playerMaxSpeedOnGround * Time.fixedDeltaTime) / _aimFollowsPlayerDistance); //set initial position float displacementFromCenterStage = _displacementToRadiusRatio * Stage.Instance.radius; Vector2 randomPoint = GameFlowManager.Instance.currentRound <= 1 ? new Vector2(0, 1) : UnityEngine.Random.insideUnitCircle; Vector3 spawnPosition = new Vector3(randomPoint.normalized.x * displacementFromCenterStage, 0, randomPoint.normalized.y * displacementFromCenterStage); gameObject.transform.Translate(spawnPosition); //set initial rotation Vector3 towardsCenterStage = _centerStageTransform.position - _headTransform.position; Quaternion initialRotation = Quaternion.FromToRotation(_headTransform.forward, towardsCenterStage); initialRotation.eulerAngles = new Vector3(initialRotation.eulerAngles.x, initialRotation.eulerAngles.y, 0f); _headTransform.rotation = initialRotation; _bodyTransform.rotation = initialRotation; // _headTransform.Rotate(initialRotation.eulerAngles.x, initialRotation.eulerAngles.y, initialRotation.eulerAngles.z); // _headTransform.rotation = initialRotation; _health.onDamaged += HandleOnDamaged; _enemyAnimator.Stop(); _enemyAnimator.Play("GolemSpawn"); if (_spawnClip) { AudioUtility.CreateSFX(_spawnClip, transform.position, AudioUtility.AudioGroups.EnemySpawn, 0.6f, 5f, 500f, 1f); } }
void OnDamaged(float damage, GameObject damageSource) { // test if the damage source is the player if (damageSource && !damageSource.GetComponent <EnemyController>()) { // pursue the player DetectionModule.OnDamaged(damageSource); onDamaged?.Invoke(); m_LastTimeDamaged = Time.time; // play the damage tick sound if (DamageTick && !m_WasDamagedThisFrame) { AudioUtility.CreateSFX(DamageTick, transform.position, AudioUtility.AudioGroups.DamageTick, 0f); } m_WasDamagedThisFrame = true; } }
void OnDetectedTarget() { if (aiState == AIState.Idle) { aiState = AIState.Attack; } for (int i = 0; i < onDetectVFX.Length; i++) { onDetectVFX[i].Play(); } if (onDetectSFX) { AudioUtility.CreateSFX(onDetectSFX, transform.position, AudioUtility.AudioGroups.EnemyDetection, 1f); } animator.SetBool(k_AnimIsActiveParameter, true); m_TimeStartedDetection = Time.time; }
// this method shouldnt really take an upgradeController but it was the best way for me to attach it to the onpick event while keeping handleonpick as an abstract method public void PlayPickupFeedback(PlayerUpgradeManager upgradeController) { if (m_HasPlayedFeedback) { return; } if (pickupSFX) { AudioUtility.CreateSFX(pickupSFX, transform.position, AudioUtility.AudioGroups.Pickup, 0f); } if (pickupVFXPrefab) { var pickupVFXInstance = Instantiate(pickupVFXPrefab, transform.position, Quaternion.identity); } m_HasPlayedFeedback = true; Destroy(gameObject); }
public override void DeathBehavior(float timeSpentInCurrentState) { if (timeSpentInCurrentState < Time.fixedDeltaTime) { _enemyAnimator.Stop(); _enemyAnimator.Play("GolemDeath"); //ignore all collision _bodyRigidbody.detectCollisions = false; //move to DontHit layer (so that dying enemy doesn't get hit by projectiles) gameObject.layer = LayerMask.NameToLayer("DontHit"); _hitbox.layer = LayerMask.NameToLayer("DontHit"); _hurtbox.layer = LayerMask.NameToLayer("DontHit"); //stop moving ChangeVelocity(new Vector3(0, 0, 0)); //turn off lasers _aimLaser.gameObject.SetActive(false); _attackLaser.gameObject.SetActive(false); _laserHum.gameObject.SetActive(false); //spawn pickup PickupManager.Instance.ChooseDeathPickup(_eyeTransform.position); if (_deathClip) { AudioUtility.CreateSFX(_deathClip, transform.position, AudioUtility.AudioGroups.EnemySpawn, 0.6f, 5f, 500f, 1f); } } _mainAudioSource.volume = Mathf.Lerp(0.3f, 0f, (Time.time - timeSpentInCurrentState) / _deathDuration); if (timeSpentInCurrentState >= _deathDuration) { OnDeathComplete.Invoke(); } }
void OnHit(Vector3 point, Vector3 normal, Collider collider) //ヒット時(ポイントの向き、大きさ, コライダー) { // damage if (areaOfDamage) { // area damage areaOfDamage.InflictDamageInArea(damage, point, hittableLayers, k_TriggerInteraction, m_ProjectileBase.owner); } else { //ポイントダメージ Damageable damageable = collider.GetComponent <Damageable>(); //ダメージ ダメージ = コライダー.コンポーネントを取得<破損> if (damageable) { damageable.InflictDamage(damage, false, m_ProjectileBase.owner); //ダメージ ダメージを与える(ダメージ,false,m_ProjectileBase. オーナー) } } // impact vfx if (impactVFX) { GameObject impactVFXInstance = Instantiate(impactVFX, point + (normal * impactVFXSpawnOffset), Quaternion.LookRotation(normal)); if (impactVFXLifetime > 0) { Destroy(impactVFXInstance.gameObject, impactVFXLifetime); } } // impact sfx if (impactSFXClip) { AudioUtility.CreateSFX(impactSFXClip, point, AudioUtility.AudioGroups.Impact, 1f, 3f); } // Self Destruct Destroy(this.gameObject); }
void OnHit(Vector3 point, Vector3 normal, Collider collider) { // damage if (AreaOfDamage) { // area damage AreaOfDamage.InflictDamageInArea(Damage, point, HittableLayers, k_TriggerInteraction, m_ProjectileBase.Owner); } else { // point damage Damageable damageable = collider.GetComponent <Damageable>(); if (damageable) { damageable.InflictDamage(Damage, false, m_ProjectileBase.Owner); } } // impact vfx if (ImpactVfx) { GameObject impactVfxInstance = Instantiate(ImpactVfx, point + (normal * ImpactVfxSpawnOffset), Quaternion.LookRotation(normal)); if (ImpactVfxLifetime > 0) { Destroy(impactVfxInstance.gameObject, ImpactVfxLifetime); } } // impact sfx if (ImpactSfxClip) { AudioUtility.CreateSFX(ImpactSfxClip, point, AudioUtility.AudioGroups.Impact, 1f, 3f); } // Self Destruct Destroy(this.gameObject); }
void Start() { //spawn duration will last 30 frames _spawnDuration = 30f * Time.fixedDeltaTime; //death duration will last 10 frames _deathDuration = 10f * Time.fixedDeltaTime; _maxForce = _maxVelocity / 3 * _rigidbody.mass / Time.fixedDeltaTime; _deltaThetaLook = _deltaTheta * 2f; gameObject.transform.Translate(initialPosition); _playerTransform = GameObject.FindWithTag("Player").transform.Find("Main Camera"); _enemyAnimator.Stop(); _enemyAnimator.Play("SwarmerSpawn"); if (_spawnClip) { AudioUtility.CreateSFX(_spawnClip, transform.position, AudioUtility.AudioGroups.EnemySpawn, 0.6f, 30f, 500f, 0.4f); } }
void OnDamaged(float damage, GameObject damageSource) { //損傷の原因がプレイヤーかどうかをテストします if (damageSource && damageSource.GetComponent <PlayerCharacterController>()) { //プレーヤーを追跡します m_DetectionModule.OnDamaged(damageSource); if (onDamaged != null) { onDamaged.Invoke(); } m_LastTimeDamaged = Time.time; //ダメージティックサウンドを再生します if (damageTick && !m_WasDamagedThisFrame) { AudioUtility.CreateSFX(damageTick, transform.position, AudioUtility.AudioGroups.DamageTick, 0f); } m_WasDamagedThisFrame = true; } }
void OnDamaged(float damage, GameObject damageSource) { // test if the damage source is the player if (damageSource && damageSource.GetComponent <PlayerCharacterController>()) { // pursue the player m_TimeLastSeenTarget = Time.time; knownDetectedTarget = damageSource; if (onDamaged != null) { onDamaged.Invoke(); } m_LastTimeDamaged = Time.time; // play the damage tick sound if (damageTick && !m_WasDamagedThisFrame) { AudioUtility.CreateSFX(damageTick, transform.position, AudioUtility.AudioGroups.DamageTick, 0f); } m_WasDamagedThisFrame = true; } }