void AddedBehavior() { if (particleSystem != null) { GameObject newPsys = GameObject.Instantiate(particleSystem.gameObject); newPsys.SetActive(true); DestroyOnTime dot = newPsys.AddComponent <DestroyOnTime>(); dot.time = particleSystem.duration * 2f; } }
protected override void OnDie() { EngineDelegate.instance.CreateEffect("Explode", this.transform.position, Quaternion.identity); CharacterController cc = GetComponent <CharacterController>(); if (cc != null) { Destroy(cc); } UnitMotor um = GetComponent <UnitMotor>(); if (um != null) { Destroy(um); } BoxCollider box = this.gameObject.AddComponent <BoxCollider>(); box.size = new Vector3(2.0f, 2.0f, 4.0f); box.center = new Vector3(0.0f, 2.0f, 0.0f); Rigidbody rb = this.gameObject.AddComponent <Rigidbody>(); if (rb != null) { rb.useGravity = true; rb.velocity = new Vector3(0.0f, diedVelocity, 0.0f); rb.angularVelocity = new Vector3(0.0f, 0.0f, diedAngularVelocity); } DestroyOnTime dot = this.gameObject.AddComponent <DestroyOnTime>(); if (dot != null) { dot.time = dieDisappearTime; } gameObject.layer = LayerMask.NameToLayer("UnhitableObject"); foreach (Transform tran in transform) { if (tran.gameObject.renderer != null) { tran.gameObject.renderer.material.color = new Color(0.3f, 0.3f, 0.3f); } } }
protected void OnViewerEffectMessage(ViewerEffectMessage message) { Region region = Agent.CurrentPlayer?.Region; if (region == null) { return; } foreach (ViewerEffect viewerEffect in message.Effects) { GameObject go = null; switch (viewerEffect) { case ViewerEffectSpiral spiralEffect: go = Instantiate(SpiralEffectPrefab, transform); // TODO: Use effect pool go.transform.position = region.GetLocalPosition(spiralEffect.PositionGlobal); break; case ViewerEffectLookAt lookAtEffect: go = Instantiate(LookAtEffectPrefab, transform); // TODO: Use effect pool go.transform.position = region.GetLocalPosition(lookAtEffect.TargetPosition); break; case ViewerEffectPointAt pointAtEffect: go = Instantiate(PointAtEffectPrefab, transform); // TODO: Use effect pool go.transform.position = region.GetLocalPosition(pointAtEffect.TargetPosition); // TODO: Set the source position to the location of the source avatar? break; } if (go == null) { Logger.LogWarning("ViewerEffectsManager.OnViewerEffectMessage", $"ViewerEffect of type {viewerEffect.EffectType} is not implemented."); continue; } GameObjectByEffectId[viewerEffect.Id] = go; DestroyOnTime dot = go.GetComponent <DestroyOnTime>(); if (dot != null) { dot.LifeTime = viewerEffect.Duration; } } }