Возникла проблема, когда 2D-игра (пробел) Я пытаюсь переместить игрока, используя RB2D с addforce. Кажется, я могу выбрать два направления одновременно. Если я нажимаю вниз, проигрыватель падает, но при нажатии вверх он не поднимается, а останавливается. То же самое с левой / правой. Гравитация установлена в 0. Оба объекта имеют жесткое тело2d, и мне нужна динамика, чтобы позволить "подпрыгивать" и другую физику в игре.
- Всегда присутствует объект (скрипт движения)
Я хочу, чтобы игрок былвозможность двигаться вверх, вниз, влево, вправо. Я действительно согласен с медленным, но не обязательным эффектом. (Если вы отпустите клавиши, это замедлится из-за трения)
Мой проигрыватель настроен на многоуровневый формат, так как это многопользовательский режим, и родительский объект всегда находится вgame.
Я попробовал следующее: - Обмен Dynamic + Kinematic на обоих или по одному на каждом. -Добавление силы, трансформации, скорости и т. Д. -Настроенные трения, перетаскивания и т. Д. -Проверенные отладочные силы x / y применяются в игре, но игрок не будет двигаться в противоположном направлении после первого движения.
Я загрузилфайлы для github здесь.
Движение игрока
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class PlayerUnit : NetworkBehaviour {
//float speed = .5F;
float rotationSpeed = 50.0F;
float xMin;
float xMax;
float yMin;
float yMax;
// configuration parameters
[Header("Player")]
[SerializeField] float moveSpeed = .5f;
[SerializeField] float padding = 1f;
[SerializeField] int health = 200;
[SerializeField] AudioClip deathSound;
[SerializeField] [Range(0, 1)] float deathSoundVolume = 0.75f;
[SerializeField] AudioClip shootSound;
[SerializeField] [Range(0, 1)] float shootSoundVolume = 0.25f;
Rigidbody2D rb;
void Start () {
rb = this.GetComponent<Rigidbody2D>();
}
void Update () {
if( hasAuthority == false )
{
return;
}
if ( Input.GetKeyDown(KeyCode.Space) )
{
this.transform.Translate( 0, 1, 0 );
}
}
private void FixedUpdate()
{
if (true)
{
float leftright = Input.GetAxis("Horizontal");
float updown = Input.GetAxis("Vertical");
float xForce = leftright * moveSpeed * Time.deltaTime;
float yForce = updown * moveSpeed * Time.deltaTime;
Vector2 force = new Vector2(xForce, yForce);
rb.AddForce(force);
Debug.Log("xForce : " + xForce + " yForce : " + yForce);
//float leftright = Input.GetAxis("Horizontal") * moveSpeed;
//float updown = Input.GetAxis("Vertical") * moveSpeed;
////rb.MovePosition(rb.position + new Vector2(1, 0) * leftright);
//rb.MovePosition(transform.position + (transform.right * leftright + transform.up * updown) * moveSpeed);
//rb.MovePosition(rb.position + new Vector2(0, 1) * updown);
}
}
}
![enter image description here](https://i.stack.imgur.com/CzZPd.png)
![enter image description here](https://i.stack.imgur.com/aU2tG.png)
![enter image description here](https://i.stack.imgur.com/6XXmX.png)