private void CollisionEnter() { if (EffectOnHitObject != null && hit.transform != null) { var hitGO = hit.transform; var renderer = hitGO.GetComponentInChildren <Renderer>(); var effectInstance = Instantiate(EffectOnHitObject) as GameObject; effectInstance.transform.parent = renderer.transform; effectInstance.transform.localPosition = Vector3.zero; effectInstance.GetComponent <AddMaterialOnHit>().UpdateMaterial(hit); } if (AttachAfterCollision) { tRoot.parent = hit.transform; } if (SendCollisionMessage) { var collInfo = new CollisionInfo { Hit = hit }; effectSettings.OnCollisionHandler(collInfo); if (hit.transform != null) { var shield = hit.transform.GetComponent <ShieldCollisionBehaviour>(); if (shield != null) { shield.ShieldCollisionEnter(collInfo); } } } onCollision = true; }
private void CollisionEnter() { if (EffectOnHitObject != null && hit.transform != null) { var addMat = hit.transform.GetComponentInChildren <AddMaterialOnHit>(); effectSettingsInstance = null; if (addMat != null) { effectSettingsInstance = addMat.gameObject.GetComponent <EffectSettings>(); } if (effectSettingsInstance != null) { effectSettingsInstance.IsVisible = true; } else { var hitGO = hit.transform; var renderer = hitGO.GetComponentInChildren <Renderer>(); var effect = Instantiate(EffectOnHitObject) as GameObject; effect.transform.parent = renderer.transform; effect.transform.localPosition = Vector3.zero; effect.GetComponent <AddMaterialOnHit>().UpdateMaterial(hit); effectSettingsInstance = effect.GetComponent <EffectSettings>(); } } effectSettings.OnCollisionHandler(new CollisionInfo { Hit = hit }); }
private void CollisionEnter() { if (EffectOnHitObject != null && hit.transform != null) { var hitEffect = Instantiate(EffectOnHitObject, tRoot.position, new Quaternion()) as GameObject; var hitGo = hit.transform.gameObject; var mesh = hitGo.GetComponent <MeshFilter>().sharedMesh; hitEffect.GetComponent <MeshFilter>().sharedMesh = mesh; hitEffect.transform.parent = hitGo.transform; hitEffect.transform.localPosition = Vector3.zero; var rand = 1 + Random.Range(0, 2000) / 100000f; hitEffect.transform.localScale = new Vector3(rand, rand, rand); } if (AttachAfterCollision) { tRoot.parent = hit.transform; } if (SendCollisionMessage) { effectSettings.OnCollisionHandler(new CollisionInfo { Hit = hit }); } onCollision = true; }
void Start() { GetEffectSettingsComponent(transform); goInstances = new List <GameObject>(); count = (int)(Duration / Interval); for (int i = 0; i < count; i++) { var go = Instantiate(GO, transform.position, new Quaternion()) as GameObject; go.transform.parent = transform; var es = go.GetComponent <EffectSettings>(); es.Target = effectSettings.Target; es.IsHomingMove = effectSettings.IsHomingMove; es.MoveDistance = effectSettings.MoveDistance; es.MoveSpeed = effectSettings.MoveSpeed; //es.DeactivateAfterCollision = effectSettings.DeactivateAfterCollision; //es.DeactivateTimeDelay = effectSettings.DeactivateTimeDelay; es.CollisionEnter += (n, e) => effectSettings.OnCollisionHandler(e); es.ColliderRadius = effectSettings.ColliderRadius; es.EffectRadius = effectSettings.EffectRadius; es.EffectDeactivated += effectSettings_EffectDeactivated; goInstances.Add(go); go.SetActive(false); } InvokeAll(); isInitialized = true; }
void DeactivateAttachedPoints(RaycastHit hit) { for (int i = 0; i < AttachedPoints.Length; i++) { var ap = AttachedPoints[i]; ap.SetActive(false); } var collInfo = new CollisionInfo { Hit = hit }; effectSettings.OnCollisionHandler(collInfo); if (hit.transform != null) { var shield = hit.transform.GetComponent <ShieldCollisionBehaviour>(); if (shield != null) { shield.ShieldCollisionEnter(collInfo); } } onCollision = true; }
private void CollisionEnter() { if (EffectOnHitObject != null && hit.transform != null) { var addMat = hit.transform.GetComponentInChildren <AddMaterialOnHit>(); effectSettingsInstance = null; if (addMat != null) { effectSettingsInstance = addMat.gameObject.GetComponent <EffectSettings>(); effectSettingsInstance.EffectDeactivated += (sender, e) => { addMat.RemoveNewMaterial(); }; } if (effectSettingsInstance != null) { effectSettingsInstance.IsVisible = true; } else { var hitGO = hit.transform; var renderer = hitGO.GetComponentInChildren <Renderer>(); var effect = ObjectPoolManager.Spawn(EffectOnHitObject) as GameObject; effect.transform.parent = renderer.transform; effect.transform.localPosition = Vector3.zero; AddMaterialOnHit addMaterialScript = effect.GetComponent <AddMaterialOnHit>(); addMaterialScript.UpdateMaterial(hit); effectSettings.EffectDeactivated += (sender, e) => { addMaterialScript.RemoveNewMaterial(); }; } } effectSettings.OnCollisionHandler(new CollisionInfo { Hit = hit }); }
private void Update() { if (tTarget == null || isFinished) { return; } var pos = tRoot.position; RaycastHit verticalHit; Physics.Raycast(new Vector3(pos.x, 0.5f, pos.z), Vector3.down, out verticalHit); tRoot.position = verticalHit.point; pos = tRoot.position; var endPoint = effectSettings.IsHomingMove ? tTarget.position : targetPos; var pointOnGround = new Vector3(endPoint.x, 0, endPoint.z); if (Vector3.Distance(new Vector3(pos.x, 0, pos.z), pointOnGround) <= effectSettings.ColliderRadius) { effectSettings.OnCollisionHandler(new CollisionInfo()); isFinished = true; } tRoot.position = Vector3.MoveTowards(pos, pointOnGround, effectSettings.MoveSpeed * Time.deltaTime); }
void InitializeDefault() { GetComponent <Renderer>().material.SetFloat("_Chanel", currentShaderIndex); ++currentShaderIndex; if (currentShaderIndex == 3) { currentShaderIndex = 0; } line.SetPosition(0, tRoot.position); if (IsVertical) { if (Physics.Raycast(tRoot.position, Vector3.down, out hit)) { line.SetPosition(1, hit.point); if (StartGlow != null) { StartGlow.transform.position = tRoot.position; } if (HitGlow != null) { HitGlow.transform.position = hit.point; } if (GoLight != null) { GoLight.transform.position = hit.point + new Vector3(0, LightHeightOffset, 0); } if (Particles != null) { Particles.transform.position = hit.point + new Vector3(0, ParticlesHeightOffset, 0); } if (Explosion != null) { Explosion.transform.position = hit.point + new Vector3(0, ParticlesHeightOffset, 0); } } } else { tTarget = effectSettings.Target.transform; var targetDirection = (tTarget.position - tRoot.position).normalized; var direction = tRoot.position + targetDirection * effectSettings.MoveDistance; if (Physics.Raycast(tRoot.position, targetDirection, out hit, effectSettings.MoveDistance + 1, effectSettings.LayerMask)) { direction = (tRoot.position + Vector3.Normalize(hit.point - tRoot.position) * (effectSettings.MoveDistance + 1)).normalized; } line.SetPosition(1, hit.point - effectSettings.ColliderRadius * direction); var particlesOffsetPos = hit.point - direction * ParticlesHeightOffset; if (StartGlow != null) { StartGlow.transform.position = tRoot.position; } if (HitGlow != null) { HitGlow.transform.position = particlesOffsetPos; } if (GoLight != null) { GoLight.transform.position = hit.point - direction * LightHeightOffset; } if (Particles != null) { Particles.transform.position = particlesOffsetPos; } if (Explosion != null) { Explosion.transform.position = particlesOffsetPos; } } var collInfo = new CollisionInfo { Hit = hit }; effectSettings.OnCollisionHandler(collInfo); if (hit.transform != null) { var shield = hit.transform.GetComponent <ShieldCollisionBehaviour>(); if (shield != null) { shield.ShieldCollisionEnter(collInfo); } } }
void Start() { GetEffectSettingsComponent(transform); effectSettings.OnCollisionHandler(new CollisionInfo()); isInitialized = true; }
void OnCollisionEnter(Collision collision) { effectSettings.OnCollisionHandler(new CollisionInfo()); }
void InitializeDefault() { renderer.material.SetFloat("_Chanel", currentShaderIndex); ++currentShaderIndex; if (currentShaderIndex == 3) { currentShaderIndex = 0; } line.SetPosition(0, tRoot.position); if (IsVertical) { if (Physics.Raycast(tRoot.position, Vector3.down, out hit)) { line.SetPosition(1, hit.point); if (StartGlow != null) { StartGlow.transform.position = tRoot.position; } if (HitGlow != null) { HitGlow.transform.position = hit.point; } if (GoLight != null) { GoLight.transform.position = hit.point + new Vector3(0, LightHeightOffset, 0); } if (Particles != null) { Particles.transform.position = hit.point + new Vector3(0, ParticlesHeightOffset, 0); } if (Explosion != null) { Explosion.transform.position = hit.point + new Vector3(0, ParticlesHeightOffset, 0); } } } else { tTarget = effectSettings.Target.transform; var targetDirection = (tTarget.position - tRoot.position).normalized; if (Physics.Raycast(tRoot.position, targetDirection, out hit, effectSettings.MoveDistance + 1, effectSettings.LayerMask)) { var direction = (tRoot.position + Vector3.Normalize(hit.point - tRoot.position) * (effectSettings.MoveDistance + 1)).normalized; line.SetPosition(1, hit.point - effectSettings.ColliderRadius * direction); var particlesOffsetPos = hit.point - direction * ParticlesHeightOffset; if (StartGlow != null) { StartGlow.transform.position = tRoot.position; } if (HitGlow != null) { HitGlow.transform.position = particlesOffsetPos; } if (GoLight != null) { GoLight.transform.position = hit.point - direction * LightHeightOffset; } if (Particles != null) { Particles.transform.position = particlesOffsetPos; } if (Explosion != null) { Explosion.transform.position = particlesOffsetPos; } OnEffectOnHitObject(); //OnExplosion(direction * ParticlesHeightOffset); } } effectSettings.OnCollisionHandler(new CollisionInfo { Hit = hit }); }