Как сделать пружинный объект, который толкает игрока горизонтально?C#

Место общения программистов C#
Ответить
Anonymous
 Как сделать пружинный объект, который толкает игрока горизонтально?

Сообщение Anonymous »

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

public class spring : MonoBehaviour
{
[SerializeField] public float jumpHeight = 10f;

private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.CompareTag("Player"))
{
collision.gameObject.GetComponent().AddForce(Vector2.up * jumpHeight, ForceMode2D.Impulse);
}
}
}
Я сделал пружину вверх, и сделать ее было довольно легко. Я думал, что будет так же легко сделать пружину в сторону, но сейчас мне не повезло. Сценарий выше называется восходящим пружинным сценарием. Я также знаю, что мне нужно что-то сделать с направлением, поскольку игрок будет идти к пружине, чтобы ударить по ней, а затем его отстрелят.
Я попытался адаптировать свой сценарий восходящей пружины. чтобы вы шли в направлении, указанном в скрипте (например, Vector2.right, чтобы идти направо), но я предполагаю, что это просто не так и не может работать таким образом. Все сообщения, которые я видел в Интернете, когда пытался решить свою проблему, похоже, были либо о чем-то еще в Unity, случайно названном пружиной, либо о том, как нажать объект, когда игрок
редактирует:
фактические результаты для Vector2.right не меняют направление, а просто отбрасывают игрока. Кроме того, я переименовал переменную jumpHeight в rightForce, но я уверен, что это не имеет никакого отношения к тому, что она не работает. Unity не показала ошибок.

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

    bool IsGrounded()
{
return GetComponent().velocity.y == 0;
}
[SerializeField] private float speed = 0;
[SerializeField] private float jumpHeight = 0;
[SerializeField] private float FastFallSpeed = 0;
[SerializeField] private Rigidbody2D rb;

// Start is called before the first frame update
void Start()
{

}

// Update is called once per frame
void Update()
{
rb.velocity = new Vector2(Input.GetAxis("Horizontal") * speed, rb.velocity.y);

if (IsGrounded())
{
if (Input.GetKey(KeyCode.W))
{
rb.velocity = new Vector2(rb.velocity.x, jumpHeight);
}

}
}

void FixedUpdate()
{
if (!IsGrounded())
{
if (Input.GetKey(KeyCode.S))
{
rb.velocity = new Vector2(rb.velocity.x, FastFallSpeed);
}
}
}

Кроме того, вот код движения персонажа

Подробнее здесь: https://stackoverflow.com/questions/790 ... rizontally
Ответить

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

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

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

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

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