- Home /
I am looking for a code which makes sure the character is grounded when the game starts,Is there a code to make sure the character is grounded when the game starts?
(I am using Character Controller)
I am looking for a code which makes sure the character is grounded when the game starts, i am a noob in unity so please explain if i have to add a component etc.,I am looking for a code which makes sure the character is grounded when the game starts, i am a beginner in unity so i do not know.
Answer by dhore · Jan 25, 2021 at 08:39 AM
Assuming you're using a default capsule. Add a sphere collider and edit the collider's parameters as follows:
IsTrigger: Yes
Center: 0, -0.6, 0
Radius: 0.45
.
Now in a script attached to that gameobject:
public class GroundedScript : MonoBehaviour
{
private bool isGrounded = false;
private void OnTriggerEnter(Collider other)
{
// Grounded
isGrounded = true;
}
private void OnTriggerExit(Collider other)
{
// Ungrounded
isGrounded = false;
}
}
You might also need to check what object its trigger is entering. For example, if the player jumps near a wall, the collider will intersect with the wall and set isGrounded to true again, which isn't what you want. Only if the object is tagged as floor, or has a layer called ground etc.
I specified a sphere radius smaller than that of the default capsule to avoid it touching walls. It can always be tweaked later but just keeping it simple for now.
I get the error: " Type or namespace definition, or end-of-file expected". I don't know what that means...
You likely have too many or not enough braces.... If you show me your code I can look for you, it's a bit hard to help otherwise.. and make sure to use the 'code sample' button when pasting your code
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player$$anonymous$$ovement : $$anonymous$$onoBehaviour
{
private bool isGrounded = false;
private void OnTriggerEnter(Collider other)
{
// Grounded
isGrounded = true;
}
private void OnTriggerExit(Collider other)
{
// Ungrounded
isGrounded = false;
}
}
public CharacterController controller;
public float speed = 12f;
public float gravity = -9.81f;
public float jumpHeight = 3f;
public Transform groundCheck;
public float groundDistance = 0.4f;
public Layer$$anonymous$$ask ground$$anonymous$$ask;
Vector3 velocity;
bool isGrounded;
// Update is called once per frame
void Update()
{
isGrounded = Physics.CheckSphere(groundCheck.position, groundDistance, ground$$anonymous$$ask);
if(isGrounded && velocity.y < 0)
{
velocity.y = -2f;
}
float x = Input.GetAxis("Horizontal");
float z = Input.GetAxis("Vertical");
Vector3 move = transform.right * x + transform.forward * z;
controller.$$anonymous$$ove(move * speed * Time.deltaTime);
if(Input.GetButtonDown("Jump") && isGrounded)
{
velocity.y = $$anonymous$$athf.Sqrt(jumpHeight * -2f * gravity);
}
velocity.y += gravity * Time.deltaTime;
controller.$$anonymous$$ove(velocity * Time.deltaTime);
}
}
Answer by JungaBoon · Jan 24, 2021 at 09:45 PM
Something like this? https://www.youtube.com/watch?v=_QajrabyTJc
I followed that tutorial but my character won't jump because it's not grounded
Your answer
Follow this Question
Related Questions
Let Character Controller jump. 0 Answers
Let Character Controller jump. 1 Answer
2D sprite rotating in 3D plane 0 Answers
Player inversed inputs 0 Answers
second character controller ??? 4 Answers