2015-09-11 2 views
-1

Я новичок в Unity3d. У меня есть некоторый опыт программирования в андроидах, но никакой C# опыт вообще. Первое, что я пытаюсь сделать, это создать клон Flappy игры птицы, называемой Flappy плоскости, в соответствии с этой обучающей http://anwell.me/articles/unity3d-flappy-bird/Unity3d flappy bird tutorial - пробел не работает

Проблема в том, когда я попытался написать скрипт, который позволяет игроку перемещать (игрока .cs) с кодом

using UnityEngine; 

using System.Collections; 


public class player: MonoBehaviour { 



public Vector2 jumpForce = new Vector2(0,300); 

public Vector2 jumpForce2 = new Vector2(0,-300); 
// Use this for initialization 


// Update is called once per frame 

void Update() { 


if (Input.GetKeyUp("space")){ 

    Rigidbody2D.velocity = Vector2.zero; 

    Rigidbody2D.AddForce(jumpForce); 


} 

} 
} 

Я получаю ошибку «ссылка на объект требуется для доступа к нестатическому элементу" UnityEngine.Rigidbody2D.velocity». Я гугле, что и предлагается доступ Rigidbody2d с GetComponent(). Скорость,

поэтому я изменил

Rigidbody2D.velocity = Vector2.zero; 

    Rigidbody2D.AddForce(jumpForce); 

с

GetComponent<Rigidbody2D>().velocity = Vector2.zero; 

    GetComponent<Rigidbody2D>().AddForce(jumpForce); 

исчезла ошибка, и я могу добавить сценарий к объекту, тем не менее я не получаю желаемого действия - после того, как я нажму на игру, объект станет невидимым и просто падает, не реагирует на кнопку пробела. Что я делаю не так? Спасибо за ответ.

+0

Ого, есть Flappy-птица-клон теги! – Catwood

ответ

1

Возможно, вы не добавляете достаточную силу, чтобы объект двигался вверх.

В вашем коде нет ничего плохого. (Хотя у вас есть что-то смешавшееся в вашем вопросе). Проблема заключается в том, что вы не добавляете НИЖЕ силу вверх по каждому кадру.

По существу, на данный момент ваш игровой объект находится в свободном падении, когда вы нажимаете кнопку воспроизведения, и вы добавляете незначительную силу игроку только на фреймах, на которые нажимается пробел.

Чтобы решить эту проблему, вот что вы должны делать

  1. Добавить подъемную силу для борьбы с терроризмом, действует сила тяжести для каждого кадра. Вы можете сделать это двумя способами. a. Установите velocity.y rigidbody в 0 перед обнаружением пробела (это действительно взломанный способ, но этого будет достаточно и не нужно больше кода)

    b. Добавьте к игроку восходящую силу, которая аннулирует действие силы тяжести. Просто используйте F = mg, чтобы получить значение силы, которое вам нужно будет добавить.

  2. Вы можете, в качестве альтернативы установить isKinematic свойство истинно по умолчанию на RigidBody Игрока, установите его в ложна на клавишу пробела, и обратно к истине через несколько кадров (5 - 6 кадров)

0

убедитесь, что ваш игровой объект и земля имеют коллайдеры BoxCollider2D, чтобы держаться над землей.

вы можете сохранить ссылку сохраненную для Rigidbody как Rigidbody2D myRigidbody;

затем в начало поставить myRigidbody = GetComponent<Rigidbody2D>();, то вы бы использовать как myRigidbody.AddForce(jumpForce); ваш jumpForce2 хотя стреляет ваш игрок вниз вы не должны его в прыжке, как физика и гравитация будет применяться с жестким корпусом.

упаковывает ваш вход не установлен в проекте настроек пытаются стрелять прыгать с

Input.GetKeyDown(KeyCode.Space);