Game Development Asked by SleepySleeper on March 5, 2021
My project is an infinite runner that goes right in a straight line. Sometimes when it just runs without jumping the Player stops. Sometimes the Player doesn’t stop. When you jump the Player usually stops a lot earlier. I’ve been trying to fix this, but I can’t find the solution.
How I’m doing this is by making the character move to the right all the time with 1 point in the front for ground generating and 1 point in the back for deleting ground. The camera is following the player and the points are going forward at the same pace as the player. The ground is even, but the player always stops. Please help.
Code for generating the ground:
using UnityEngine;
using System.Collections;
public class PlatformGenerator : MonoBehaviour {
public GameObject thePlatform;
public Transform generationPoint;
public float distanceBetween;
private float platformWidth;
// Use this for initialization
void Start () {
platformWidth = thePlatform.GetComponent<BoxCollider2D>().size.x;
}
// Update is called once per frame
void Update () {
if (transform.position.x < generationPoint.position.x)
{
transform.position = new Vector3 (transform.position.x + platformWidth + distanceBetween, transform.position.y, transform.position.z);
Instantiate (thePlatform, transform.position, transform.rotation);
}
}
}
Code for controlling the Player:
using UnityEngine;
using System.Collections;
public class PlayerControl : MonoBehaviour {
public float moveSpeed;
public float jumpForce;
private Rigidbody2D myRigidbody;
public bool grounded;
public LayerMask whatIsGround;
private Collider2D myCollider;
private Animator myAnimator;
// Use this for initialization
void Start () {
myRigidbody = GetComponent<Rigidbody2D>();
myRigidbody.velocity = new Vector2(moveSpeed, 0);
myCollider = GetComponent<Collider2D>();
myAnimator = GetComponent<Animator> ();
}
// Update is called once per frame
//void Update () {
// myRigidbody.velocity = new Vector2(moveSpeed, myRigidbody.velocity.y);
//
// if(Input.GetKeyDown(KeyCode.Space) || Input.GetMouseButtonDown(0));
// {
// myRigidbody.velocity=new Vector2(myRigidbody.velocity.x, jumpForce);
// }
void Update () {
grounded = Physics2D.IsTouchingLayers(myCollider, whatIsGround);
if (Input.GetKeyDown(KeyCode.Space))
{
if(grounded)
{
Jump();
}
}
myAnimator.SetFloat ("Speed", myRigidbody.velocity.x);
myAnimator.SetBool ("Grounded", grounded);
}
void Jump () {
myRigidbody.AddForce(new Vector2(0, jumpForce));
}
}
If you have several platforms connected in Unity your character might sometimes, (not always) slow down/stop.
There are 2 fixes that might work for this :
1. Circle Collider
2. Physics Material
Correct answer by BiiX on March 5, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP