/// <summary> /// Spawn a animate object with the death event, /// so after the animate was played serval loop times /// the object will be destroyed. /// </summary> /// <param name="anim"> animation u want to play </param> /// <param name="orderLayer"> sorting order </param> /// <param name="loopTimes"> loop times </param> /// <returns> object spawned. </returns> public static GameObject SpawnAnimateObjectDeathEvent(RuntimeAnimatorController anim, int orderLayer = 15, int loopTimes = 1) { GameObject gm = SpawnAnimateObject(anim, orderLayer); JCS_DestroyAnimEndEvent daee = gm.AddComponent <JCS_DestroyAnimEndEvent>(); daee.LoopTimes = loopTimes; return(gm); }
/// <summary> /// /// </summary> private void SpawnAttackAnimation() { if (mAtkAnim == null) { JCS_Debug.LogReminders( "JCS_SwingAttackAction", @"No animation assign but u still want to spawn a animation..."); return; } GameObject gm = new GameObject(); #if (UNITY_EDITOR) gm.name = "JCS_SwingAttackAction"; #endif // set the effect transform. if (mAsSamePosition) { gm.transform.position = this.mAtkAnimSpawnTrans.position; } if (mAsSameRotation) { gm.transform.rotation = this.mAtkAnimSpawnTrans.rotation; } if (mAsSameScale) { gm.transform.localScale = this.mAtkAnimSpawnTrans.localScale; } gm.transform.position += mAnimOffsetPosition; gm.transform.localScale += mAnimOffsetScale; if (this.transform.localScale.x < 0) { Vector3 newScale = gm.transform.localScale; newScale.x = JCS_Mathf.ToNegative(newScale.x); gm.transform.localScale = newScale; } SpriteRenderer sr = gm.AddComponent <SpriteRenderer>(); sr.sortingOrder = mOrderLayer; Animator animator = gm.AddComponent <Animator>(); animator.runtimeAnimatorController = mAtkAnim; animator.speed = animator.speed * JCS_Mathf.Reciprocal(mAnimSpeed); JCS_DestroyAnimEndEvent dae = gm.AddComponent <JCS_DestroyAnimEndEvent>(); dae.LoopTimes = mLoopTimes; }
/// <summary> /// Add random value to the effect's transform's scale. /// </summary> /// <param name="dae"> effect transform </param> private void AddRandomScale(JCS_DestroyAnimEndEvent dae) { float addScale; Vector3 newScale = dae.transform.localScale; addScale = Random.Range(-mRandScaleRange, mRandScaleRange); newScale.x += addScale; addScale = Random.Range(-mRandScaleRange, mRandScaleRange); newScale.y += addScale; // Not sure we have to include z direction? addScale = Random.Range(-mRandScaleRange, mRandScaleRange); newScale.z += addScale; dae.transform.localScale = newScale; }
/// <summary> /// Add random value to the effect's transform's rotation. /// </summary> /// <param name="dae"> effect transform </param> private void AddRandomRotation(JCS_DestroyAnimEndEvent dae) { float addRot; Vector3 newRot = dae.transform.localEulerAngles; addRot = Random.Range(-mRandRotRange, mRandRotRange); newRot.x += addRot; addRot = Random.Range(-mRandRotRange, mRandRotRange); newRot.y += addRot; // Not sure we have to include z direction? addRot = Random.Range(-mRandRotRange, mRandRotRange); newRot.z += addRot; dae.transform.localEulerAngles = newRot; }
/// <summary> /// Add random value to the effect's transform's position. /// </summary> /// <param name="dae"> effect transform </param> private void AddRandomPosition(JCS_DestroyAnimEndEvent dae) { float addPos; Vector3 newPos = dae.transform.position; addPos = Random.Range(-mRandPosRange, mRandPosRange); newPos.x += addPos; addPos = Random.Range(-mRandPosRange, mRandPosRange); newPos.y += addPos; // Not sure we have to include z direction? addPos = Random.Range(-mRandPosRange, mRandPosRange); newPos.z += addPos; dae.transform.position = newPos; }
private void OnDestroy() { // if is quitting the application don't spawn object, // or else will cause memory leak! if (JCS_ApplicationManager.APP_QUITTING) { return; } // if switching the scene, don't spawn new gameObject. if (JCS_SceneManager.instance.IsSwitchingScene()) { return; } // trigger this effect? bool onTrigger = false; if (mActiveWhatever) { onTrigger = true; } // no need to check the rest. else { // if checking for hit list if (mActiveWithHitList) { if (mHitList.IsHit) { onTrigger = true; } } // if checking for destroy time. if (mActiveWithDestroyTime) { if (mDestroyObjectWithTime != null) { if (mDestroyObjectWithTime.TimesUp) { onTrigger = true; } } else { JCS_Debug.LogError("You can't active destroy time without `JCS_DestroyObjectWithTime` component"); } } } // do not trigger this effect. if (!onTrigger) { return; } GameObject gm = new GameObject(); #if (UNITY_EDITOR) gm.name = "JCS_3DDestroyAnimEffect"; #endif SpriteRenderer sr = gm.AddComponent <SpriteRenderer>(); sr.sortingOrder = mOrderLayer; Animator animator = gm.AddComponent <Animator>(); animator.runtimeAnimatorController = mDestroyAnim.GetRandomAnim(); // add this event, so the when animation done play it will get destroy. JCS_DestroyAnimEndEvent dae = gm.AddComponent <JCS_DestroyAnimEndEvent>(); dae.LoopTimes = LoopTimes; if (mSamePosition) { dae.transform.position = this.transform.position; } if (mSameRotation) { dae.transform.rotation = this.transform.rotation; } if (mSameScale) { dae.transform.localScale = this.transform.localScale; } // Random Effect if (mRandPos) { AddRandomPosition(dae); } if (mRandRot) { AddRandomRotation(dae); } if (mRandScale) { AddRandomScale(dae); } }