Answer the question
In order to leave comments, you need to log in
Why doesn't AddForce work?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
public float speed = 4.5f;
public float Climbspeed = 1.0f;
public float jumpForce = 8.0f;
private CapsuleCollider2D _box;
private Rigidbody2D _body;
private Animator _anim;
private bool grounded = false;
private bool jump = false;
private bool stairs = false;
private float Crouch;
private string[] TagNames = { "floor", "Stairs", "Untagged" };
private const int TGLen = 3;
private int AllTags;
private Dictionary<string, int> Bricks = new Dictionary<string, int>(TGLen);
void Start()
{
_body = GetComponent<Rigidbody2D>();
_anim = GetComponent<Animator>();
_box = GetComponent<CapsuleCollider2D>();
for (int i = 0; i < TGLen; i++)
{
Bricks.Add(TagNames[i], 0);
}
}
void Update()
{
float deltaX = Input.GetAxis("Horizontal") * speed;
float deltaY = Input.GetAxis("Vertical") * Climbspeed;
float Crouch = Input.GetAxis("Fire1");
AllTags = GetTagSum();
grounded = Bricks["floor"] > 0;
stairs = Bricks["Stairs"] > 0;
if (grounded && Input.GetKeyDown(KeyCode.Space) && Crouch == 0)
{
_body.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
jump = true;
Debug.Log('!');
}
if (grounded)
{
jump = false;
}
if (AllTags == 0) { jump = true; }
if (jump) { Crouch = 0; }
if (stairs && !jump &&false)
{
Crouch = 0;
_body.gravityScale = 0;
}
else
{
deltaY = 0;
_body.gravityScale = 3;
}
if (!jump)
{
Vector2 movement = new Vector2(deltaX * (1 - Crouch), deltaY);
_body.velocity = movement;
}
else
{
Vector2 movement = new Vector2(deltaX * (1 - Crouch), _body.velocity.y);
_body.velocity = movement;
}
{
_anim.SetBool("Go", deltaX != 0 && grounded);
_anim.SetBool("Jump", jump);
_anim.SetBool("Crouch", Crouch == 1);
_anim.SetBool("Climb", stairs);
_anim.SetBool("ClimbGo", deltaY != 0);
}
if (!Mathf.Approximately(deltaX, 0) && !stairs)
{
transform.localScale = new Vector3(Mathf.Sign(deltaX), 1, 1);
}
}
int GetTagSum()
{
int sum = 0;
for(int i = 0; i < TGLen; i++)
{
sum += Bricks[TagNames[i]];
}
return sum;
}
void OnTriggerEnter2D(Collider2D other)
{
Bricks[other.gameObject.tag]++;
}
void OnTriggerExit2D(Collider2D other)
{
Bricks[other.gameObject.tag]--;
}
}
Answer the question
In order to leave comments, you need to log in
Working with physics in update is a bad idea. Try it through fixedupdate, this will at least solve the problem of various lags in the future, and perhaps specifically yours.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question