Прыжок при движении 2D

Программирование на Юнити.

Прыжок при движении 2D

Сообщение zimenkov1 14 июл 2017, 00:57

Есть скрипт движения и прыжка, если во время прыжка отпустить кнопку движения то куб останавливается и падает, нужно чтобы куб продолжал "лететь". Как реализовать?

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

public class playerMove : MonoBehaviour {
public float moveSpeed = 10f;
public float jumpVelocity = 10f;
public Rigidbody2D rb;
SpriteRenderer sprite;
void Awake () {
rb = GetComponent<Rigidbody2D> ();
sprite = GetComponentInChildren<SpriteRenderer> ();
}
//метод движения
void Run() {
Vector3 direction = transform.right * Input.GetAxis("Horizontal");
transform.position = Vector3.MoveTowards (transform.position, transform.position + direction, moveSpeed * Time.deltaTime);
sprite.flipX = direction.x < 0.0F;
}
//метод прыжка
void Jump(){
if (Input.GetButtonDown ("Jump") && isGround) {
rb.velocity = Vector2.up * jumpVelocity;
//rb.AddForce(new Vector2(0, jumpVelocity));
}
}
void Update (){
if (Input.GetButtonDown ("Jump")) {
Jump ();
}
}
void FixedUpdate () {
if (Input.GetButton ("Horizontal")) {
Run ();
}
}
}

Изображение
Изображение
zimenkov1
UNец
 
Сообщения: 1
Зарегистрирован: 13 июл 2017, 23:58

Re: Прыжок при движении 2D

Сообщение snezhok_13 14 июл 2017, 12:03

Предположу что не нужно делать так:

Синтаксис:
Используется csharp
rb.velocity = Vector3.up * jumpVelocity;
 


а так (тоесть добавить вертикальный компонент в вектор скорости):

Синтаксис:
Используется csharp
rb.velocity += Vector3.up * jumpVelocity;
 


И, конечно, чтобы код один раз за прыжок отработал нужно сделать, у вас вроде есть флажок. И еще плохо делать движение без RigidBody, а прыжок с ним, нужно единообразно работать, либо с RigidBody, либо c Transform везде
Разработка игр, немножко игровая журналистика, сейчас делаем Календарь: даты выхода игр
Аватара пользователя
snezhok_13
UNIверсал
 
Сообщения: 450
Зарегистрирован: 09 сен 2013, 11:12
Skype: s.coremission
  • Сайт

Re: Прыжок при движении 2D

Сообщение samana 14 июл 2017, 13:34

Раз уж ваш персонаж это rigidBody (не кинематическое), и вы хотите, чтобы он корректно взаимодействовал с препятствиями, то двигать его надо только средствами физики. Почему? Потом что потом на форуме будут вопросы - почему когда персонаж идёт в стенку, то начинает дрожать, либо вообще проходит сквозь неё.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13