Unity 2d прыжки script
Есть ли у кого-нибудь хорошие прыжки script для 2d-игр в единстве? Код, который у меня есть, но все же далек от прыжков, похоже, что он летает.
using UnityEngine;
using System.Collections;
public class movingplayer : MonoBehaviour {
public Vector2 speed = new Vector2(10,10);
private Vector2 movement = new Vector2(1,1);
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
float inputX = Input.GetAxis ("Horizontal");
float inputY = Input.GetAxis ("Vertical");
movement = new Vector2(
speed.x * inputX,
speed.y * inputY);
if (Input.GetKeyDown ("space")){
transform.Translate(Vector3.up * 260 * Time.deltaTime, Space.World);
}
}
void FixedUpdate()
{
// 5 - Move the game object
rigidbody2D.velocity = movement;
//rigidbody2D.AddForce(movement);
}
}
Ответы
Ответ 1
Обычно для прыгающих людей используйте Rigidbody2D.AddForce
с Forcemode.Impulse
. Может показаться, что ваш объект нажимается один раз по оси Y, и он автоматически падает из-за силы тяжести.
Пример:
rigidbody2D.AddForce(new Vector2(0, 10), ForceMode2D.Impulse);
Ответ 2
Ответ выше устарел с Unity 5 или новее. Используйте это вместо этого!
GetComponent<Rigidbody2D>().AddForce(new Vector2(0,10), ForceMode2D.Impulse);
Я также хочу добавить, что это делает высоту прыжка супер закрытой и только редактируемой в script, так что это то, что я сделал...
public float playerSpeed; //allows us to be able to change speed in Unity
public Vector2 jumpHeight;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update ()
{
transform.Translate(playerSpeed * Time.deltaTime, 0f, 0f); //makes player run
if (Input.GetMouseButtonDown(0) || Input.GetKeyDown(KeyCode.Space)) //makes player jump
{
GetComponent<Rigidbody2D>().AddForce(jumpHeight, ForceMode2D.Impulse);
Таким образом, вы можете редактировать высоту прыжка в Unity, не возвращаясь к script.
Боковое примечание. Я хотел прокомментировать ответ выше, но я не могу, потому что я здесь новый.:)
Ответ 3
Используйте метод Addforce() для примитива жесткого тела, убедитесь, что жесткое тело прикреплено к объекту, а сила тяжести включена, что-то вроде этого
gameObj.rigidbody2D.AddForce(Vector3.up * 10 * Time.deltaTime); or
gameObj.rigidbody2D.AddForce(Vector3.up * 1000);
Посмотрите, какая комбинация и какие значения соответствуют вашим требованиям и соответствующим образом их используют. Надеюсь, что это поможет.