сделал два скрипта на каждого игрока. различие только в кнопках управления.
но, когда я пытаюсь управлять сразу двумя игроками они как будто связаны и не могут ходить, по одному все хорошо работает.
в Юнити я новичек.
как это исправить ?
Синтаксис:
Используется csharp
[SerializeField]
private float speed = 15.0f;
[SerializeField]
private float jumpForce = 15.0f;
[SerializeField]
private int lives = 5;
private bool isgrounded = false;
private Rigidbody2D rb;
private Animator animator;
private CharStatE State
{
get { return (CharStatE)animator.GetInteger("State"); }
set { animator.SetInteger("State", (int)value); }
}
private void Awake()
{
rb = GetComponent<Rigidbody2D>();
animator = GetComponent<Animator>();
}
private void FixedUpdate()
{
ChekGround();
}
private void Update()
{
if (isgrounded) State = CharStatE.Idle;
if (Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.RightArrow)) Run();
if (Input.GetKeyDown(KeyCode.UpArrow) && isgrounded) Jump();
}
private void Run()
{
Vector3 direction = transform.right * Input.GetAxis("Horizontal");
transform.position = Vector3.MoveTowards(transform.position, transform.position + direction, speed * Time.deltaTime);
if (isgrounded) State = CharStatE.Run;
}
private void Jump()
{
rb.AddForce(transform.up * jumpForce, ForceMode2D.Impulse);
}
private void ChekGround()
{
Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position, 0.9f);
isgrounded = colliders.Length > 1;
if (!isgrounded) State = CharStatE.Jump;
}
}
public enum CharStatE
{
Idle,
Run,
Jump,
}
private float speed = 15.0f;
[SerializeField]
private float jumpForce = 15.0f;
[SerializeField]
private int lives = 5;
private bool isgrounded = false;
private Rigidbody2D rb;
private Animator animator;
private CharStatE State
{
get { return (CharStatE)animator.GetInteger("State"); }
set { animator.SetInteger("State", (int)value); }
}
private void Awake()
{
rb = GetComponent<Rigidbody2D>();
animator = GetComponent<Animator>();
}
private void FixedUpdate()
{
ChekGround();
}
private void Update()
{
if (isgrounded) State = CharStatE.Idle;
if (Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.RightArrow)) Run();
if (Input.GetKeyDown(KeyCode.UpArrow) && isgrounded) Jump();
}
private void Run()
{
Vector3 direction = transform.right * Input.GetAxis("Horizontal");
transform.position = Vector3.MoveTowards(transform.position, transform.position + direction, speed * Time.deltaTime);
if (isgrounded) State = CharStatE.Run;
}
private void Jump()
{
rb.AddForce(transform.up * jumpForce, ForceMode2D.Impulse);
}
private void ChekGround()
{
Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position, 0.9f);
isgrounded = colliders.Length > 1;
if (!isgrounded) State = CharStatE.Jump;
}
}
public enum CharStatE
{
Idle,
Run,
Jump,
}