Игрок медленно раскачивается с помощью соединения Distance в Unity 2DC#

Место общения программистов C#
Ответить
Anonymous
 Игрок медленно раскачивается с помощью соединения Distance в Unity 2D

Сообщение Anonymous »

Я делаю крюк с дистанционным шарниром в своем 2D-платформере. Однако игрок должен быстро раскачиваться, когда цепляется за объект, но вместо этого он раскачивается медленно.
Я попробовал создать еще один спрайт и добавить к нему тот же сценарий Grappling Hook. Когда я нажал кнопку воспроизведения, спрайт быстро поменялся, как и предполагалось. Компоненты проигрывателя и спрайта, такие как Rigidbody, дистанционное соединение и средство рендеринга линий, одинаковы, за исключением того, что я не включил скрипт PlayerController в другой спрайт. Поэтому я думаю что-то не так с моим скриптом PlayerController, который мешает плееру быстро качаться, потому что я удалил скрипт PlayerController из плеера и он заработал, но скрипт PlayerController очень полезен. Еще я заметил, что плеер быстро раскачивается, если заменить Velocity на AddForce, но движение игрока как на льду.
Вот скрипт плеера (С Velocity):

Код: Выделить всё

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

public class PlayerMovement : MonoBehaviour
{
// Status
[Header("Status")]
[SerializeField] public float speed;
[SerializeField] public float regularSpeed;
[SerializeField] private float jumpForce;

// Movement Mechanics
[Header("Movement Mechanics")]
public Rigidbody2D rb;
private float move;
[SerializeField] private bool isOnGround;
[SerializeField] private Transform groundCheck;
[SerializeField] private LayerMask groundLayer;

[SerializeField] private bool isMovingLeft;
[SerializeField] private bool isMovingRight;

public bool canMove;

void Start()
{
rb = GetComponent();
speed = regularSpeed;
}

void Update()
{
// Check for keyboard inputs
if (Input.GetKey(KeyCode.A))
{
MoveLeft();
}
else if (Input.GetKey(KeyCode.D))
{
MoveRight();
}
else if (!isMovingLeft && !isMovingRight)
{
StopMoving();
}

// Set direction based on button states
if (isMovingLeft)
{
MoveLeft();
}
else if (isMovingRight)
{
MoveRight();
}

// Jump when the Jump button is pressed and player is grounded
if (Input.GetButtonDown("Jump") && isGrounded() && canMove)
{
rb.AddForce(new Vector2(rb.velocity.x, jumpForce));
}

if (Input.GetButtonUp("Jump") && rb.velocity.y > 10)
{
rb.velocity = new Vector2(rb.velocity.x, rb.velocity.y * 0.5f);
}
}

void FixedUpdate()
{
// Update Rigidbody velocity based on move direction
rb.velocity = new Vector3(speed * move, rb.velocity.y, 0);
}

// Button press handlers
public void OnLeftButtonDown() => isMovingLeft = true;
public void OnLeftButtonUp() => isMovingLeft = false;
public void OnRightButtonDown() => isMovingRight = true;
public void OnRightButtonUp() => isMovingRight = false;

public void MoveLeft()
{
transform.eulerAngles = new Vector3(0, 180, 0);
move = -1;
}

public void MoveRight()
{
transform.eulerAngles = new Vector3(0, 0, 0);
move = 1;
}

public void Jump()
{
if (isGrounded() && canMove)
{
rb.AddForce(new Vector2(rb.velocity.x, jumpForce));
}
}

public void StopMoving()
{
move = 0;
}

private bool isGrounded()
{
return Physics2D.OverlapCircle(groundCheck.position, 0.2f, groundLayer);
}
}
Вот видео плеера:

А вот видео другого спрайта:

https://youtube.com/shorts/CguW2uXhBv8?feature=share

Подробнее здесь: https://stackoverflow.com/questions/791 ... n-unity-2d
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»