void FlameOnDelegate(tk2dSpriteAnimator animator, tk2dSpriteAnimationClip clip, int frameNumber) { if(clip.GetFrame(frameNumber).eventInfo.Equals("FlameOn")) { string fireTag = fireHitObject.tag; if (fireTag.Equals("Throwable")) { Vector3 position = fireHitObject.transform.position; position.z = charcoalParticleEffect.transform.position.z; // KILL THE PEASANTS Destroy(fireHitObject); // BURNINATE THE PEASANTS (particle effects) ParticleSystem localCharcoal = GameObject.Instantiate(charcoalParticleEffect, position, charcoalParticleEffect.transform.rotation) as ParticleSystem; localCharcoal.Play(); } else if (fireTag.Equals("Player")) { // TODO: tell player to get bumped } } if(clip.GetFrame(frameNumber).eventInfo.Equals("DragonFootStep")) { AudioSource.PlayClipAtPoint(footSteps[Random.Range( 0, footSteps.Count )], transform.position); } }
private void OnAnimationEventTriggered(tk2dSpriteAnimator animator, tk2dSpriteAnimationClip clip, int frameIndex) { animator.AnimationEventTriggered -= OnAnimationEventTriggered; tk2dSpriteAnimationFrame frame = clip.GetFrame(frameIndex); if (frame.eventInfo == AnimationTriggerDefs.SkillApply.ToString()) { if (owner.componentsHolder.transform.localScale.x > 0f) { skillUIElement.Apply(owner, data, Mathf.PI); } else { skillUIElement.Apply(owner, data, 0); } GhostEffectScript ghost = skillUIElement.GetComponent <GhostEffectScript>(); ghost.StartEffect(); skillUIElement.OnDestroyed = () => { skillUIElement = null; Destroy(this); }; } }
public void AnimationEventTriggered(tk2dSpriteAnimator animator, tk2dSpriteAnimationClip clip, int frame) { if (m_state == DashState.Dash && m_shouldFire && clip.GetFrame(frame).eventInfo == "fire") { Fire(); } }
// Callbacks void AnimationEventCallback(tk2dSpriteAnimator animator, tk2dSpriteAnimationClip clip, int frameNo) { var frame = clip.GetFrame(frameNo); #if DEBUG_ANIMATION Debug.Log("Animation Trigger Check: " + frame.eventInfo + " Clip Name: " + clip.name + " Frame No: " + frameNo); #endif switch (frame.eventInfo) { case "SWING_SET": isSwinging = true; break; case "SWING_UNSET": isSwinging = false; mySlashL.SetActive(false); mySlashR.SetActive(false); break; case "LEAP": // At the start of the leap, Allow Questio to switch animations (mid frame) if the player got to his other side. UpdateFacing(); if (IsFacingLeft) { if (clip.name != "swingL") { myAnim.PlayFromFrame("swingL", frameNo + 1); } } else { if (clip.name != "swingR") { myAnim.PlayFromFrame("swingR", frameNo + 1); } } Leap(); break; case "SWING_FINISHED": mySlashL.SetActive(false); mySlashR.SetActive(false); if (!isDazed) { myAnim.Play("idle"); fp.enabled = true; } SwingFinished(); UpdateFacing(); break; default: #if DEBUG_ANIMATION Debug.Log("Animation Trigger Not Found: " + frame.eventInfo); #endif break; } }
void AnimationEventDelegate (tk2dSpriteAnimator sprite, tk2dSpriteAnimationClip clip, int frameNum) { tk2dSpriteAnimationFrame frame = clip.GetFrame(frameNum); Fsm.EventData.IntData = frame.eventInt; Fsm.EventData.StringData = frame.eventInfo; Fsm.EventData.FloatData = frame.eventFloat; Fsm.Event(animationTriggerEvent); }
void AnimationEventDelegate(tk2dSpriteAnimator sprite, tk2dSpriteAnimationClip clip, int frameNum) { tk2dSpriteAnimationFrame frame = clip.GetFrame(frameNum); Fsm.EventData.IntData = frame.eventInt; Fsm.EventData.StringData = frame.eventInfo; Fsm.EventData.FloatData = frame.eventFloat; Fsm.Event(animationTriggerEvent); }
private void HandleSurpriseChestAnimationEvent(tk2dSpriteAnimator animator, tk2dSpriteAnimationClip clip, int frameNo) { tk2dSpriteAnimationFrame frame = clip.GetFrame(frameNo); if (frame.eventInfo == "coopchestvfx") { Instantiate(BraveResources.Load("Global VFX/VFX_ChestKnock_001", ".prefab"), sprite.WorldCenter + new Vector2(0f, 0.3125f), Quaternion.identity); } }
private void HandleAnimationEvent(tk2dSpriteAnimator arg1, tk2dSpriteAnimationClip arg2, int arg3) { tk2dSpriteAnimationFrame frame = arg2.GetFrame(arg3); if (frame.eventInfo == "fire") { this.SpawnProjectiles(); } }
public void AnimationEventTriggered(tk2dSpriteAnimator animator, tk2dSpriteAnimationClip clip, int frameIdx) { if (clip.GetFrame(frameIdx).eventInfo == "damageEnemies" && this.Player != null && this.Player.PlayerHasActiveSynergy("#GRIM_SUPERREAPER")) { GameObject obj = SpawnManager.SpawnVFX(ResourceCache.Acquire("Global VFX/VFX_Curse") as GameObject, gun.sprite.WorldCenter, Quaternion.identity); obj.GetComponent <tk2dBaseSprite>().PlaceAtPositionByAnchor(gun.sprite.WorldCenter, tk2dBaseSprite.Anchor.LowerCenter); obj.GetComponent <tk2dBaseSprite>().renderer.material.shader = ShaderCache.Acquire("Brave/LitCutoutUberPhantom"); GameManager.Instance.StartCoroutine(this.DelayedDamageToEnemy()); } }
void AnimationEventHandler(tk2dSpriteAnimator animator, tk2dSpriteAnimationClip clip, int frameNum) { //string str = animator.name + "\n" + clip.name + "\n" + "INFO: " + clip.GetFrame(frameNum).eventInfo; string eventInfo = clip.GetFrame(frameNum).eventInfo; if (eventInfo == "Attack Hit") { CheckRange(); } }
private void AnimationEventTriggered(tk2dSpriteAnimator animator, tk2dSpriteAnimationClip clip, int frame) { if (clip.GetFrame(frame).eventInfo == "guntoggle") { this.thisWesternBro.aiShooter.ToggleGunAndHandRenderers(true, rendererReason); foreach (var bro in otherWesternBros) { bro.aiShooter.ToggleGunAndHandRenderers(true, rendererReason); } } }
private void AnimationEventDelegate(tk2dSpriteAnimator anim, tk2dSpriteAnimationClip clip, int frameNum) { if (clip.wrapMode == tk2dSpriteAnimationClip.WrapMode.Loop && clip.name != _storedClip || clip.wrapMode == tk2dSpriteAnimationClip.WrapMode.LoopSection && clip.name != _storedClip || clip.wrapMode == tk2dSpriteAnimationClip.WrapMode.Once) { _storedClip = clip.name; tk2dSpriteAnimationFrame frame = clip.GetFrame(frameNum); string clipName = frame.eventInfo; ClientSend.EnemyAnimation(clipName); } }
void OnAnimEvent(tk2dSpriteAnimator aAnim, tk2dSpriteAnimationClip aClip, int frame) { if (anim == aAnim && aClip == mClips[(int)AnimState.attack]) { tk2dSpriteAnimationFrame frameDat = aClip.GetFrame(frame); if (frameDat.eventInfo == "actS") { mActActive = true; } else if (frameDat.eventInfo == "actE") { mActActive = false; } } }
private void OnAnimationEventTriggered(tk2dSpriteAnimator animator, tk2dSpriteAnimationClip clip, int frameIndex) { animator.AnimationEventTriggered -= OnAnimationEventTriggered; tk2dSpriteAnimationFrame frame = clip.GetFrame(frameIndex); if (frame.eventInfo == AnimationTriggerDefs.SkillApply.ToString()) { skillUIElement.Apply(owner, data, targetPosition); skillUIElement = null; Destroy(this); } }
private void AnimationEventDelegate(tk2dSpriteAnimator anim, tk2dSpriteAnimationClip clip, int frameNum) { if (clip.wrapMode == tk2dSpriteAnimationClip.WrapMode.Loop && clip.name != _storedClip || clip.wrapMode == tk2dSpriteAnimationClip.WrapMode.LoopSection && clip.name != _storedClip || clip.wrapMode == tk2dSpriteAnimationClip.WrapMode.Once) { _storedClip = clip.name; tk2dSpriteAnimationFrame frame = clip.GetFrame(frameNum); string clipName = frame.eventInfo; foreach (byte player in SessionManager.Instance.Players.Keys) { ClientSend.EnemyAnimation(player, clipName, enemyId); } } }
// Callbacks void AnimationEventCallback(tk2dSpriteAnimator animator, tk2dSpriteAnimationClip clip, int frameNo) { var frame = clip.GetFrame(frameNo); Debug.Log("Animation Trigger Check: " + frame.eventInfo); switch (frame.eventInfo) { case "CAST_FINISHED": myAnim.Play("idle"); break; default: Debug.Log("Animation Trigger Not Found: " + frame.eventInfo); break; } }
private void AnimationEventDelegate(tk2dSpriteAnimator anim, tk2dSpriteAnimationClip clip, int frameNum) { if (clip.wrapMode == tk2dSpriteAnimationClip.WrapMode.Loop && clip.name != _storedClip || clip.wrapMode == tk2dSpriteAnimationClip.WrapMode.LoopSection && clip.name != _storedClip || clip.wrapMode == tk2dSpriteAnimationClip.WrapMode.Once) { _storedClip = clip.name; tk2dSpriteAnimationFrame frame = clip.GetFrame(frameNum); string clipName = frame.eventInfo; //ServerSend.EnemyAnimation(clipName); foreach (byte player in playerIds) { ServerSend.EnemyAnimation(player, clipName, enemyId); } } }
private void OnAnimationEventTriggered(tk2dSpriteAnimator animator, tk2dSpriteAnimationClip clip, int frameIndex) { animator.AnimationEventTriggered -= OnAnimationEventTriggered; tk2dSpriteAnimationFrame frame = clip.GetFrame(frameIndex); if (frame.eventInfo == AnimationTriggerDefs.SkillApply.ToString()) { Vector3 startPoint = this.skillUIElement.transform.position; float degree = Mathf.Atan2(targetPosition.y - startPoint.y, targetPosition.x - startPoint.x) * Mathf.Rad2Deg; float angle = degree * Mathf.Deg2Rad; this.skillUIElement.Apply(owner, data, angle); for (int index = 0; index < shotAmount; index++) { SkillUI skillUIElement = ResourceUtils.AddAndGetComponent <SkillUI>(GlobalDefinitions.RESOURCE_PATH_SKILL + data.resourceID); skillUIElement.transform.SetParent(owner.componentsHolder.transform); skillUIElement.IgnoreCollisionMap(true); skillUIElement.transform.position = startPoint; skillUIElement.transform.localScale = Vector2.one; angle = (degree - shotDegree * (index + 1)) * Mathf.Deg2Rad; skillUIElement.Apply(owner, data, angle); } for (int index = 0; index < shotAmount; index++) { skillUIElement = ResourceUtils.AddAndGetComponent <SkillUI>(GlobalDefinitions.RESOURCE_PATH_SKILL + data.resourceID); skillUIElement.transform.SetParent(owner.componentsHolder.transform); skillUIElement.IgnoreCollisionMap(true); skillUIElement.transform.position = startPoint; skillUIElement.transform.localScale = Vector2.one; angle = (degree + shotDegree * (index + 1)) * Mathf.Deg2Rad; skillUIElement.Apply(owner, data, angle); } Destroy(this); this.skillUIElement = null; } }
// Token: 0x06004875 RID: 18549 RVA: 0x001A439C File Offset: 0x001A259C public void AnimationEventTriggered(tk2dSpriteAnimator animator, tk2dSpriteAnimationClip clip, int frame) { if (this.m_shouldFire && clip.GetFrame(frame).eventInfo == "fire") { if (this.State == TeleportToListOfAreasBehavior.TeleportState.TeleportIn) { SpawnManager.SpawnBulletScript(this.m_aiActor, this.teleportInBulletScript, null, null, false, null); } else if (this.State == TeleportToListOfAreasBehavior.TeleportState.TeleportOut) { SpawnManager.SpawnBulletScript(this.m_aiActor, this.teleportOutBulletScript, null, null, false, null); } this.m_shouldFire = false; } else if (this.State == TeleportToListOfAreasBehavior.TeleportState.TeleportOut && clip.GetFrame(frame).eventInfo == "teleport_collider_off") { this.m_aiActor.specRigidbody.CollideWithOthers = false; this.m_aiActor.IsGone = true; } }
public static void PlayReversed(this tk2dSpriteAnimator anim, string clipName, float fps = 12) { IEnumerator PlayReversed() { anim.Stop(); tk2dSpriteAnimationClip clip = anim.GetClipByName(clipName); tk2dSpriteAnimationFrame[] frames = clip.frames; int numFrames = frames.Length; tk2dSpriteCollectionData collectionData = clip.GetFrame(0).spriteCollection; for (int frame = numFrames - 1; frame >= 0; frame--) { int spriteId = frames[frame].spriteId; anim.SetSprite(collectionData, spriteId); yield return(new WaitForSeconds(1.0f / fps)); } } anim.StartCoroutine(PlayReversed()); }
private void AnimationEventTriggered(tk2dSpriteAnimator animator, tk2dSpriteAnimationClip clip, int frame) { if (clip.GetFrame(frame).eventInfo == "slam") { GameManager.Instance.MainCameraController.DoScreenShake(SlamScreenShakeSettings, (transform.position + new Vector3(0, 2f)), false); if (ImpactVFXObjects != null && ImpactVFXObjects.Length > 0) { float SpawnPositionX = UnityEngine.Random.Range((transform.position.x + 2), (transform.position.x + 3)); float SpawnPositionY = UnityEngine.Random.Range((transform.position.y + 2), (transform.position.y + 9)); float SpawnPositionX2 = UnityEngine.Random.Range((transform.position.x + 2), (transform.position.x + 3)); float SpawnPositionY2 = UnityEngine.Random.Range((transform.position.y + 2), (transform.position.y + 9)); Vector3 SpawnPosition = new Vector3(SpawnPositionX, SpawnPositionY); Vector3 SpawnPosition2 = new Vector3(SpawnPositionX2, SpawnPositionY2); Instantiate(BraveUtility.RandomElement(ImpactVFXObjects), SpawnPosition, Quaternion.identity); if (BraveUtility.RandomBool()) { Instantiate(BraveUtility.RandomElement(ImpactVFXObjects), SpawnPosition2, Quaternion.identity); } List <string> SoundFXList = new List <string>() { "Play_OBJ_rock_break_01", "Play_OBJ_boulder_crash_01", "Play_OBJ_stone_crumble_01" }; SoundFXList = SoundFXList.Shuffle(); AkSoundEngine.PostEvent(BraveUtility.RandomElement(SoundFXList), gameObject); if (BraveUtility.RandomBool()) { AkSoundEngine.PostEvent("Play_PET_junk_splat_01", gameObject); } } } }
void AnimationEventHandler(tk2dSpriteAnimator animator, tk2dSpriteAnimationClip clip, int frameNum) { string str = animator.name + "\n" + clip.name + "\n" + "INFO: " + clip.GetFrame(frameNum).eventInfo; StartCoroutine(PopupText(str)); }
void AnimationEventHandler(tk2dSpriteAnimator animator, tk2dSpriteAnimationClip clip, int frameNum) { string str = animator.name + "\n" + clip.name + "\n" + "INFO: " + clip.GetFrame(frameNum).eventInfo; Debug.Log(str); StartCoroutine( PopupText( str ) ); }
// Heres where a lot of the real function of the gun lies, in the animation events. // This is where the gun's sound plays, where the dash happens, and where the swing damage happens. private void AnimationEventTriggered(tk2dSpriteAnimator animator, tk2dSpriteAnimationClip clip, int frameIdx) { // This event happens near the beginning of the shoot animation, and only happens once per combo. if (clip.GetFrame(frameIdx).eventInfo == "removeClicked") { // This part plays the audio for the initial swing, with a quarter second delay to make it match the animation. int num = UnityEngine.Random.Range(1, 4); StartCoroutine(PostEventDelayed($"Play_spccleaver_swing_00" + num, 0.25f)); // Set clicked to false so that the initial shot click doesn't count towards your combo. clicked = false; } // This event happens every time the gun's intro gets played, which happens in a load of different scenarios. // All it does is clear the cooldown on the gun so that you can fire it again. if (clip.GetFrame(frameIdx).eventInfo == "refreshCooldown") { gun.ClearCooldowns(); } // This event occurs every time a swing happens in the animation. // This handles a lot of the gun's function. if (clip.GetFrame(frameIdx).eventInfo == "clickCheck") { if (clicked == false || gun.CurrentOwner.CurrentGun != gun) // This happens if you have NOT clicked since last click check, or if you aren't actually holding the gun. { // Checks if an enemy is currently being targeted, if it is then unstun it and make it able to be affected by knockback. // This is done because when you dash and hit an enemy, it gets stunned and immune to knockback. // This code makes it so that when you finish your combo early, it's no longer stunned and gets it's knockback resistance removed. if (highlightedEnemy != null) { if (highlightedEnemy.behaviorSpeculator && highlightedEnemy.behaviorSpeculator.IsStunned) { highlightedEnemy.behaviorSpeculator.EndStun(); } if (highlightedEnemy.knockbackDoer) { highlightedEnemy.knockbackDoer.SetImmobile(false, "combo"); } } DeselectEnemy(); // Deselect the enemy, because if you finish your combo early the enemy shouldn't still be selected. gun.spriteAnimator.Play(gun.introAnimation); // Play the gun's intro animation. This is done for 2 reasons: // 1. It makes the animations look nice. The way I designed the animations make it so that after every click check, the intro animation will look smooth. // 2. It calls the refreshCooldown event, which, when handled, allows you to shoot the cannonball projectile again to target another enemy. } else // This happens if you DID click since the last click check. { bool slashedEnemy = false; // This variable keeps track of whether or not you actually dealt damage to the enemy with this swing. // This is used to determine which swing sound to play, the standard sound or the impact sound. clicked = false; // Sets clicked back to false, so you have to click again before the next click check. if (highlightedEnemy != null && !highlightedEnemy.healthHaver.IsDead) // The following code only happens if you have an enemy selected, meaning you hit it with your projectile. { if (assaultLevel == -1) // This happens when your assault level is -1, meaning you haven't yet dashed at the enemy. { // Make the player immune to damage for 1 second to avoid unfair damage during dash gun.CurrentOwner.healthHaver.TriggerInvulnerabilityPeriod(1f); // Stun the enemy for 1 second. if (highlightedEnemy.behaviorSpeculator) { highlightedEnemy.behaviorSpeculator.Stun(1f); } // Make the enemy immune to knockback so it doesnt get pushed away during the dash, while other enemies do if (highlightedEnemy.knockbackDoer) { highlightedEnemy.knockbackDoer.SetImmobile(true, "combo"); } // time to dash StartCoroutine(LaunchPlayer(gun.CurrentOwner as PlayerController, highlightedEnemy)); assaultLevel = 1; // Sets the assault level to 1, indicating that you have dashed and that your combo is now a combo of 1. } else // This code happens if you HAVE already dashed at the enemy. { float damage = 1.5f * assaultLevel; // Damage calculation. The higher your assault level (combo), the higher the damage. // If the player has the Combo King synergy, double the damage of the combo swing if ((gun.CurrentOwner as PlayerController).PlayerHasActiveSynergy("Combo King")) { damage *= 2f; } // This code only occurs if you're close enough the the target enemy to actually hit it with a melee swing. // This is so that you can't target an enemy, move away, then start meleeing other enemies to get a huge combo. you instead have to target and kill one enemy first if ((highlightedEnemy.CenterPosition - gun.CurrentOwner.CenterPosition).magnitude < 3f) { // Make the enemy's skull above their head shake a little bit. // (This skull is created upon the selection of an enemy) var sc = highlightedEnemy.GetComponent <SkullController>(); if (sc) { sc.shakeAmount = 0.25f; } // This happens if the targeted enemy's health is less than the damage you would deal to it. if (highlightedEnemy.healthHaver.GetCurrentHealth() <= damage) { if (sc) { sc.BigSkullAndCrossbones(); // Activate the big skull and crossbones 3D death effect. } bool hasCannonballSynergy = (gun.CurrentOwner as PlayerController).PlayerHasActiveSynergy("Cannons Away"); // Fire 12 decent damage cannonballs, or 24 if the player has the cannons away synergy int cannonballAmount = (hasCannonballSynergy ? 24 : 12); for (int i = 0; i < cannonballAmount; i++) { GameObject gameObject = SpawnManager.SpawnProjectile(gun.DefaultModule.projectiles[0].gameObject, highlightedEnemy.CenterPosition, Quaternion.Euler(0f, 0f, i * (360f / (float)cannonballAmount)), true); Projectile component = gameObject.GetComponent <Projectile>(); component.Owner = gun.CurrentOwner; component.specRigidbody.RegisterSpecificCollisionException(highlightedEnemy.specRigidbody); component.baseData.damage *= hasCannonballSynergy ? 5f : 2f; // Deal more damage if the player has the synergy //component.transform.eulerAngles = new Vector3(0f, 0f, (i * 30f) - 90f); component.OverrideMotionModule = new SimpleCannonballProjectile(); // Assign the cannonballs a motion module, giving it afterimages and allowing it to speed up. } LaunchParticles(0f, 360, 1f, 1f, 3000, 15, 2f); // Fire off a death particle burst if ((gun.CurrentOwner as PlayerController).PlayerHasActiveSynergy("Axes Don't Reload")) { gun.spriteAnimator.Play(gun.introAnimation); // If the player has the Axes Don't Reload synergy, instead of forcing a gun reload, simply play the intro animation again to reset the projectile cooldown. } else { gun.Reload(); // Force the gun to reload, so you can't instantly shoot another projectile } } // Deal damage ExploderExtensions.DoRadialDamageNoIFrames(damage, gun.CurrentOwner.CenterPosition, 3f, false, true); // If the gun isn't reloading (aka if the enemy didn't just die), launch particles in the direction of the slash if (!gun.IsReloading) { LaunchParticles((highlightedEnemy.CenterPosition - gun.CurrentOwner.CenterPosition).ToAngle() - 40f + (50f * (frameIdx == 10 ? 1f : -1f) * ((gun.CurrentAngle > -90f || gun.CurrentAngle < 90f) ? 1f : -1f))); } slashedEnemy = true; // Indicate that the impact sound should be played rather than the standard swing sound assaultLevel++; // Increase the combo // Stun the enemy for an additional half-second so it doesn't start shooting at you mid-combo if (highlightedEnemy.behaviorSpeculator) { highlightedEnemy.behaviorSpeculator.Stun(0.5f); } } } } // Play the swing sound or the impact sound depending on the value of the slashedEnemy variable after a fifth of a second delay to sync with the animation int num = UnityEngine.Random.Range(1, 4); StartCoroutine(PostEventDelayed($"Play_spccleaver_{(slashedEnemy ? "impact" : "swing")}_00" + num, 0.2f)); } } }
void OnAnimEvent(tk2dSpriteAnimator aAnim, tk2dSpriteAnimationClip aClip, int frame) { if(anim == aAnim && aClip == mClips[(int)AnimState.attack]) { tk2dSpriteAnimationFrame frameDat = aClip.GetFrame(frame); if(frameDat.eventInfo == "actS") { mActActive = true; } else if(frameDat.eventInfo == "actE") { mActActive = false; } } }
//called on the impact frame of a punch void PunchEvent(tk2dSpriteAnimator sprite, tk2dSpriteAnimationClip clip, int frameNum) { // create the punch hit box GameObject clone = Instantiate(punchBox, new Vector3(transform.position.x+2,transform.position.y,0), transform.rotation) as GameObject; clone.transform.parent = transform; // set strength based on which punch it is // by getting the frame info from the anim trigger if (clip.GetFrame(frameNum).eventInfo == "punch1") { clone.GetComponent<punchCollider>().strength = punch1Strength; } if (clip.GetFrame(frameNum).eventInfo == "punch2") { clone.GetComponent<punchCollider>().strength = punch2Strength; clone.transform.position = new Vector3(transform.position.x+3.5f,transform.position.y,0); } if (clip.GetFrame(frameNum).eventInfo == "airPunch1") { clone.GetComponent<punchCollider>().strength = punch3Strength; clone.transform.position = new Vector3(transform.position.x+1.5f,transform.position.y-1f,0); } if (clip.GetFrame(frameNum).eventInfo == "uppercut1") { clone.GetComponent<punchCollider>().strength = punch4Strength; clone.transform.position = new Vector3(transform.position.x+1.5f,transform.position.y+1f,0); } if (clip.GetFrame(frameNum).eventInfo == "uppercut2") { clone.GetComponent<punchCollider>().strength = uppercutStrength; clone.transform.position = new Vector3(transform.position.x+1.5f,transform.position.y+1f,0); //second uppercut gets a little vertical boost velocity = new Vector3(0.8f,1.25f,0); } //print(frame.eventInfo); }