Место общения программистов C#
Anonymous
Unity AddForce не толкает, но телепортируется
Сообщение
Anonymous » 22 июл 2025, 06:37
Я хотел сделать сценарий для броска в 2D -игре, но я столкнулся с проблемой, когда меня телепортировали на очень маленькое расстояние. Я пытался положить линейную скорость вместо AddForce, но мой персонаж отказался двигаться так, как я хотел в Dash. Он просто ходил в скрипте движения.
Код: Выделить всё
public class PlayerMovement : MonoBehaviour
{
public float runSpeed = 0.3f;
public float jump = 3f;
public byte a = 0;
private bool isdashing;
private bool candash = true;
private int dash = 13000;
private byte cddash = 2;
private float timedash = 1f;
private Rigidbody2D rigidbody;
public Animator animator;
[SerializeField] private SpriteRenderer sr;
private void Start()
{
rigidbody = GetComponent();
sr = GetComponent();
}
private void Update()
{
jumper();
if (Input.GetKeyDown(KeyCode.LeftAlt) && candash)
{
StartCoroutine(Dash());
}
animator.SetFloat("Speed", Mathf.Abs(Input.GetAxis("Horizontal") * runSpeed));
if (Input.GetAxis("Horizontal") < 0)
{
sr.flipX = true;
}
else if (Input.GetAxis("Horizontal") > 0)
{
sr.flipX = false;
}
if (a == 0)
{
animator.SetBool("jumping", true);
}
else
{
animator.SetBool("jumping", false);
}
}
void FixedUpdate()
{
move();
if (isdashing)
{
return;
}
}
void move()
{
rigidbody.linearVelocity = new Vector2(Input.GetAxis("Horizontal") * runSpeed, rigidbody.linearVelocityY);
}
void jumper()
{
if (a > 0)
if (Input.GetKeyDown(KeyCode.Space))
{
rigidbody.AddForce(transform.up * jump, ForceMode2D.Impulse);
}
}
private void OnCollisionStay2D(Collision2D collision)
{
if (collision.gameObject.tag == "ground")
{
a = 1;
}
}
private void OnCollisionExit2D(Collision2D collision)
{
if (collision.gameObject.tag == "ground")
{
a = 0;
}
}
private IEnumerator Dash()
{
candash = false;
isdashing = true;
rigidbody.gravityScale = 0;
if (sr.flipX == true)
{
rigidbody.linearVelocity = new Vector2(0, 0);
rigidbody.AddForce(transform.right * dash * -1, ForceMode2D.Force);
}
else if (sr.flipX == false)
{
rigidbody.linearVelocity = new Vector2(0, 0);
rigidbody.AddForce(transform.right * dash, ForceMode2D.Force);
}
yield return new WaitForSeconds(timedash);
isdashing = false;
rigidbody.gravityScale = 3;
yield return new WaitForSeconds(cddash);
candash = true;
}
}
Подробнее здесь:
https://stackoverflow.com/questions/797 ... -teleports
1753155434
Anonymous
Я хотел сделать сценарий для броска в 2D -игре, но я столкнулся с проблемой, когда меня телепортировали на очень маленькое расстояние. Я пытался положить линейную скорость вместо AddForce, но мой персонаж отказался двигаться так, как я хотел в Dash. Он просто ходил в скрипте движения.[code]public class PlayerMovement : MonoBehaviour { public float runSpeed = 0.3f; public float jump = 3f; public byte a = 0; private bool isdashing; private bool candash = true; private int dash = 13000; private byte cddash = 2; private float timedash = 1f; private Rigidbody2D rigidbody; public Animator animator; [SerializeField] private SpriteRenderer sr; private void Start() { rigidbody = GetComponent(); sr = GetComponent(); } private void Update() { jumper(); if (Input.GetKeyDown(KeyCode.LeftAlt) && candash) { StartCoroutine(Dash()); } animator.SetFloat("Speed", Mathf.Abs(Input.GetAxis("Horizontal") * runSpeed)); if (Input.GetAxis("Horizontal") < 0) { sr.flipX = true; } else if (Input.GetAxis("Horizontal") > 0) { sr.flipX = false; } if (a == 0) { animator.SetBool("jumping", true); } else { animator.SetBool("jumping", false); } } void FixedUpdate() { move(); if (isdashing) { return; } } void move() { rigidbody.linearVelocity = new Vector2(Input.GetAxis("Horizontal") * runSpeed, rigidbody.linearVelocityY); } void jumper() { if (a > 0) if (Input.GetKeyDown(KeyCode.Space)) { rigidbody.AddForce(transform.up * jump, ForceMode2D.Impulse); } } private void OnCollisionStay2D(Collision2D collision) { if (collision.gameObject.tag == "ground") { a = 1; } } private void OnCollisionExit2D(Collision2D collision) { if (collision.gameObject.tag == "ground") { a = 0; } } private IEnumerator Dash() { candash = false; isdashing = true; rigidbody.gravityScale = 0; if (sr.flipX == true) { rigidbody.linearVelocity = new Vector2(0, 0); rigidbody.AddForce(transform.right * dash * -1, ForceMode2D.Force); } else if (sr.flipX == false) { rigidbody.linearVelocity = new Vector2(0, 0); rigidbody.AddForce(transform.right * dash, ForceMode2D.Force); } yield return new WaitForSeconds(timedash); isdashing = false; rigidbody.gravityScale = 3; yield return new WaitForSeconds(cddash); candash = true; } [/code] } Подробнее здесь: [url]https://stackoverflow.com/questions/79708240/unity-addforce-does-not-push-but-teleports[/url]