void Update() { delayAnimationMove -= Time.deltaTime; delayAnimationShoot -= Time.deltaTime; if (delayAnimationMove < 0f && delayAnimationShoot < 0f) { sprite = spriteMove[0]; } delayJump -= Time.deltaTime; delayShoot -= Time.deltaTime; float offset = 0f; isUp = Input.GetKey(KeyCode.W); isCrouch = Input.GetKey(KeyCode.S); isShoot = Input.GetKey(KeyCode.K) && delayShoot < 0f; if (Input.GetKey(KeyCode.A)) { offset = -speed * Time.deltaTime; drt = 0; } else if (Input.GetKey(KeyCode.D)) { offset = speed * Time.deltaTime; drt = 1; } float velocity = Mathf.Clamp((rb.velocity.x + offset) * 0.9f, -6f, 6f); rb.velocity = new Vector2(velocity, rb.velocity.y); if (velocity > 0.5f || velocity < -0.5f) { if (delayAnimationMove < 0f && delayAnimationShoot < 0f) { delayAnimationMove = 0.1f; stateMove++; if (stateMove == 4) { stateMove = 0; } sprite = spriteMove[stateMove]; } } transform.localScale = localScale[drt]; if (isJump && rb.velocity.y < -0.1f) { isFall = true; } jumpState = -1; if (Input.GetKey(KeyCode.J)) { jumpState = 0; } else if (Input.GetKey(KeyCode.L)) { jumpState = 1; } if (IsGrounded()) { if (isUp && PortalManager.IsInPortal(transform.position)) { Instantiate(playerPortal, transform.position, Quaternion.identity); Destroy(gameObject); SoundEffect.PlayPortal(); return; } isJump = false; var pos = Unstable.tilemap.WorldToCell(transform.position - Vector3.up * 0.3f); pos.y -= 1; if (jumpState == 1 && isFall && isCrouch) { if (pos.x != currentTileX || pos.y != currentTileY) { currentTileX = pos.x; currentTileY = pos.y; jumpLow = 3; } else { jumpLow--; if (jumpLow == 0) { currentTileY = -99; Unstable.DestroyTile(pos); } } } if (delayJump < 0f && jumpState > -1) { isJump = true; delayJump = 0.1f; rb.velocity = new Vector2(rb.velocity.x, jumpVelocity[jumpState]); SoundEffect.PlayJump(); } isFall = false; } else { isJump = true; } if (isJump && delayAnimationShoot < 0f) { sprite = spriteJump; delayAnimationMove = 0.1f; } if (isCrouch) { sprite = spriteCrouch; } if (isShoot) { if (isCrouch) { sprite = spriteCrouch; if (StoneManager.stone > 0) { delayShoot = 0.3f; Vector3 pos; if (isJump) { pos = transform.position - Vector3.up * 1.5f; } else { pos = transform.position - Vector3.up * 0.5f + offsetHorizontal[drt]; } if (Unstable.CreateStone(pos)) { StoneManager.ReloadStone(-1); } } } else { delayShoot = 0.4f; sprite = spriteShoot; if (isUp) { Instantiate(bulletUp, transform.position + Vector3.up * 0.6f + offsetHorizontal[drt] * 0.4f, Quaternion.identity); } else { GameObject obj = Instantiate(bullet, transform.position + Vector3.up * 0.34f + offsetHorizontal[drt] * 0.43f, Quaternion.identity); obj.transform.localScale = localScale[drt]; obj.GetComponent <BulletController>().direction = offsetHorizontal[drt]; } SoundEffect.PlayShoot(); } delayAnimationShoot = 0.2f; } spriteRenderer.sprite = sprite; if (!isImmune) { if (Physics2D.OverlapBox(box.bounds.center, box.bounds.size, 0f, layerEnemy) != null) { LostHp(1); } } else { delayAnimationImmune -= Time.deltaTime; if (delayAnimationImmune < 0f) { delayAnimationImmune = 0.025f; isShowSprite = !isShowSprite; } if (!isShowSprite) { spriteRenderer.sprite = null; } timerImmune -= Time.deltaTime; if (timerImmune < 0f) { isImmune = false; } } if (transform.position.y < -8.5f) { LostHp(HpManager.hp); } if (!isCameraBoss && transform.position.x >= posBossActive) { isCameraBoss = true; Instantiate(cameraBoss); } ReloadCamera(); }