0

我正在尝试在我的游戏中添加一个摆动系统,但是每当我的玩家执行摆动动画时,它都会回到同一个地方,我该如何解决这样的问题?这是一段视频,展示了它的作用:https ://streamable.com/7jxgqx

我使用角色控制器来移动玩家所以有谁知道如何防止玩家突然回到它来自的地方

问题:https ://streamable.com/7jxgqx

我的代码:1)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Swinging : MonoBehaviour
{

    [SerializeField]Animator m_Animator;
    CharacterController cc;
    [SerializeField]GameObject jumpArea;
    PlayerController playerController;

    private void Start()
    {
        cc = GetComponent<CharacterController>();
        playerController = GetComponent<PlayerController>();
        playerController.enabled = true;
        cc.enabled = true;
    }

    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Collider"))
        {
            StartCoroutine(StartSwinging());
        }
    }

    IEnumerator StartSwinging()
    {
        m_Animator.SetTrigger("swing");
        cc.enabled = false;
        playerController.enabled = false;
        yield return new WaitForSeconds(2.3f);
        m_Animator.SetBool("afterSwing", true);
        Destroy(jumpArea);
        playerController.enabled = true;
        cc.enabled = true;
    }
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    CharacterController cc;
    public Transform groundCheck;
    public LayerMask groundLayer;
    float wallJumpVelocity;
    public Animator m_Animator;
    private Vector3 direction;
    public float speed = 5f;
    public float jumpForce = 8f;
    public float gravity = -20f;

    public bool canDoubleJump = true;


    public bool isGrounded;
    void Start()
    {
        cc = GetComponent<CharacterController>();
    }

    // Update is called once per frame
    void Update()
    {
        float horizontalInput = Input.GetAxis("Horizontal");
        direction.x = horizontalInput * speed;
        m_Animator.SetFloat("run", Mathf.Abs(horizontalInput)); // Mathf.Abs i igivea rac  modulebi anu |-5| = 5 
        isGrounded = Physics.CheckSphere(groundCheck.position, 0.2f, groundLayer);
        m_Animator.SetBool("isGrounded", isGrounded);

        Jump();
        if (horizontalInput != 0)
        {
            Quaternion flip = Quaternion.LookRotation(new Vector3(0, 0, horizontalInput));
            transform.rotation = flip;
        }
        cc.Move(direction * Time.deltaTime);
    }

    void Jump()
    {
        // es kodi anichebs chvens motamashes axtomis funqicas

        if (isGrounded)
        {
            canDoubleJump = true;
            if (Input.GetButtonDown("Jump"))
            {
                direction.y = jumpForce;
            }
        }
        else
        {
            if (canDoubleJump && Input.GetButtonDown("Jump"))
            {
                m_Animator.SetTrigger("doubleJump");
                direction.y = jumpForce;
                canDoubleJump = false;
            }
        }

        direction.y += gravity * Time.deltaTime;
    }

}

我也尝试过应用根运动,但它不起作用我使用的是 mixamo 的动画。

谢谢 <3

4

0 回答 0