Привет и спасибо за это.
Я сделал небольшую игру в Unity, и я наконец получил элементы управления движением с сенсорным входом для работы.
Но сейчас я сталкиваюсь с небольшой проблемой с объединением движения и прыгающей части. Я не могу прыгнуть, если я буду двигаться, НО Я могу двигаться, если я прыгаю.
Каждый из моих клавиш со стрелками содержит скрипт, а затем вызывает сценарий "RobotController", чтобы начать движение.
ArrowRight и ScriptLeft Script. Они выглядят очень похожими, поэтому я буду публиковать только 1:
private RobotController PlayermoveRight;
// Use this for initialization
void Start () {
PlayermoveRight = GameObject.Find("Player").GetComponent<RobotController>();
}
void OnMouseOver()
{
if(Input.touchCount >= 1)
{
var touchr = Input.touches[0];
if(touchr.phase != TouchPhase.Ended && touchr.phase != TouchPhase.Canceled)
{
PlayermoveRight.MoveRight();
}
else
{
}
}
}
Сценарий ArrowUp:
void OnMouseOver()
{
GameObject Go = GameObject.Find("Player");
if ((Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began) || (Input.GetMouseButtonDown(0)))
{
Go.GetComponent<RobotController>().Jump();
}
}
И скрипт RobotController:
public double moveTime = 0.1;
public double moveTimeR = 0.1;
private double lastPressedTime = 0.0;
private double PressRight = 0.0;
public void MoveLeft() // If ArrowLeft is clicked or Pressed
{
lastPressedTime = Time.timeSinceLevelLoad;
}
public void MoveRight() // If ArrowRight is clicked or Pressed
{
PressRight = Time.timeSinceLevelLoad;
}
void FixedUpdate () {
if (PressRight + moveTimeR > Time.timeSinceLevelLoad)
{
rigidbody2D.velocity = new Vector2 (maxSpeed, rigidbody2D.velocity.y);
}
else if (lastPressedTime + moveTime > Time.timeSinceLevelLoad)
{
rigidbody2D.velocity = new Vector2 (maxSpeed - maxSpeed - maxSpeed, rigidbody2D.velocity.y);
}
else
{
rigidbody2D.velocity = new Vector2(0.0f, rigidbody2D.velocity.y);
}
}
public void Jump()
{
if (isOnGround == true) {
anim.SetBool("Ground",false);
rigidbody2D.AddForce (new Vector2 (0, jumpForce));
}
}
Как я могу это сделать, я могу прыгать и двигаться в одно и то же время?
из кода со стрелкой вверх:
(Input.GetTouch(0).phase == TouchPhase.Began) || (Input.GetMouseButtonDown(0))
вы проверяете, только что началось первое касание, если вы удерживаете стрелку перемещения, и вы нажимаете вверх, чтобы прыгать "прыжок", это не первое касание, и первое касание (для движения) не находится в он начал фазу.
Причина, по которой он работает с ударом прыжка, а затем движется, заключается в том, что первым касанием в этом случае является касание перехода (по совпадению, а не по коду).
Вы не хотите проверять первое касание здесь, вы хотите проверить на касание, которое находится над стрелкой вверх.
(не уверен, как вы на самом деле это делаете, но я не могу комментировать, пока не получу 50 rep :()
Я также новичок и столкнулся с этой проблемой несколько часов назад, но я исправил ее, как мне сказали, чтобы сделать это в видеоуроке, так что исправление было следующим: добавьте некоторое перетаскивание на плеер, в инспекторе есть опция "Линейное перетаскивание" в вашем компоненте rigidBody увеличьте его на 0,3 (0 - значение по умолчанию), это действительно исправило мою проблему. Я надеюсь, что это также поможет вам (я знаю, что это действительно поздно, но я только что нашел ваш вопрос при поиске моей проблемы).