transform.Rotate(0f,180f,0f);旋转2D精灵,但不是孩子

时间:2019-04-16 17:00:24

标签: c# unity3d

我试图从2D播放器实现射击,附加“生成点”并使之成为播放器的子代,当我尝试翻转精灵时,它起作用了,但没有翻转“生成点”因此,当我向左转时,我的“生成点”仍然向右看,所以当我射击时,子弹向左移动,而不是向右移动。

完整脚本:

public class PlayerController : MonoBehaviour
{  
    void FixedUpdate()
    {
        RaycastHit2D hit = Physics2D.BoxCast(this.transform.position, new Vector2(0.4f, 0.1f), 0f, Vector2.down, groundCheckRadius, groundMask); //using this for a bigger and more accurate ground check
        isTouchingGround = (hit.collider != null) ? true : false;

        movementInput = Input.GetAxis("Horizontal");

        CheckIfStuck(); //Checks if Mario is trying to walk into the wall and get stuck

        if (!isDead)
        {
            if ((playerRigidbody2D.velocity.x > 0 && !isFacingRight) || (playerRigidbody2D.velocity.x < 0 && isFacingRight))
            {
                playerAnimator.SetBool("turning", true);
            }
            else
            {
                playerAnimator.SetBool("turning", false);
            }

            float movementForceMultiplier = Mathf.Max(maxHorizontalSpeed - Mathf.Abs(playerRigidbody2D.velocity.x), 1);

            playerRigidbody2D.AddForce(new Vector2(movementInput * movementForce * movementForceMultiplier, 0));

            playerRigidbody2D.velocity = new Vector2(Mathf.Clamp(playerRigidbody2D.velocity.x, -maxHorizontalSpeed, maxHorizontalSpeed), Mathf.Clamp(playerRigidbody2D.velocity.y, -maxVerticalSpeed, maxVerticalSpeed));

            if (Input.GetKeyDown(KeyCode.Space))
            {
                if (isTouchingGround)
                {
                    //Play Jump sound
                    if (!poweredUp)
                        audioSource.PlayOneShot(smallJumpSound);
                    else
                        audioSource.PlayOneShot(bigJumpSound);

                    isJumping = true;
                    playerRigidbody2D.velocity = new Vector2(playerRigidbody2D.velocity.x, jumpVelocity);
                    jumpTimeCounter = jumpTime;
                }
            }

            if (jumpTimeCounter > 0 && isJumping)
                if (Input.GetKey(KeyCode.Space))
                {
                    jumpTimeCounter -= Time.deltaTime;
                    {
                        playerRigidbody2D.velocity = new Vector2(playerRigidbody2D.velocity.x, jumpVelocity);
                    }
                }

            if (Input.GetKeyUp(KeyCode.Space))
            {
                isJumping = false;
                jumpTimeCounter = 0;
            }

            playerAnimator.SetFloat("movementSpeed", Mathf.Abs(playerRigidbody2D.velocity.x));
            playerAnimator.SetBool("touchingGround", isTouchingGround);
        }

        if (movementInput > 0 && !isFacingRight)
        {
            FlipSprite();
        }
        else if (movementInput < 0 && isFacingRight)
        {
            FlipSprite();
        }

    }

    void FlipSprite()
    {
        isFacingRight = !isFacingRight;
        //Vector3 tempScale = transform.localScale;
        //tempScale.x *= -1;
        //transform.localScale = tempScale;
        transform.Rotate(0f, 180f, 0f);
    }
}

翻转方法:

void FlipSprite()
    {
        isFacingRight = !isFacingRight;
        //Vector3 tempScale = transform.localScale;
        //tempScale.x *= -1;
        //transform.localScale = tempScale;
        transform.Rotate(0f, 180f, 0f);
    }

0 个答案:

没有答案