Elezthem
@Elezthem
17 лет, плохое зрение...

Как сделать нормальное приземление после переворота в Geometry Dash на Unity?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class PlayerJump : MonoBehaviour
{
    public float jumpForce = 7f; // Сила прыжка
    private bool _isGround = false;
    [SerializeField] private Transform sprite;
    [SerializeField] private float rotateSpeed;
    private Rigidbody2D rb;

    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0) && _isGround == true)
        {
            rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse); // Используйте ForceMode2D.Impulse
            _isGround = false;
        }
        if (!_isGround)
            RotateSprite();
    }

    private void OnCollisionEnter2D(Collision2D other)
    {
        if (other.gameObject.tag == "ground")
        {
            _isGround = true;
        }
    }

    private void RotateSprite()
    {
        Vector3 e = sprite.eulerAngles;
        e.z += rotateSpeed;
        sprite.rotation = Quaternion.Euler(e);
    }
}

Вот код, в RotateSprite, игрок переворачивается как в geometry dash, но да он переворачивается но он становиться на угол и не очень ровно ложиться, вот как мне сделать чтобы он четко переворачивался и четко ложился на бок и тд?
  • Вопрос задан
  • 224 просмотра
Решения вопроса 1
Elezthem
@Elezthem Автор вопроса
17 лет, плохое зрение...
using UnityEngine;

public class CubeController : MonoBehaviour
{
    public float rotationAmount = 90.0f;
    public KeyCode rotateKey = KeyCode.Space; // Или любую другую клавишу, которую вы хотите использовать

    private bool isRotating = false;

    void Update()
    {
        if (Input.GetKeyDown(rotateKey) && !isRotating)
        {
            isRotating = true;
            RotateCube();
        }
    }

    void RotateCube()
    {
        float targetAngle = transform.eulerAngles.z + rotationAmount;
        Quaternion targetRotation = Quaternion.Euler(0, 0, targetAngle);

        StartCoroutine(RotateCoroutine(targetRotation));
    }

    System.Collections.IEnumerator RotateCoroutine(Quaternion targetRotation)
    {
        float duration = 0.5f; // Продолжительность анимации в секундах

        Quaternion startRotation = transform.rotation;
        float time = 0.0f;

        while (time < duration)
        {
            transform.rotation = Quaternion.Lerp(startRotation, targetRotation, time / duration);
            time += Time.deltaTime;
            yield return null;
        }

        transform.rotation = targetRotation;
        isRotating = false;
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы