Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by WeslleySousa · Sep 01, 2016 at 05:13 PM · c#2d-platformer

I don't know how to ground check the player

I'm trying to use the OverlapCircle to check if the player is on the ground or not but I don't know how to continue the script

using UnityEngine; using System.Collections;

public class playercontroller : MonoBehaviour {

 [HideInInspector]
 public bool facingRight = true;
 [HideInInspector]
 public bool jump = false;
 public float moveForce = 365f;
 public float maxSpeed = 5f;
 public float jumpForce = 1000f;
 public Transform groundCheck;
 public LayerMask whatIsGround;
 
 


 public bool grounded = false;
 private Animator anim;
 private Rigidbody2D rb2d;


 // Use this for initialization
 void Awake()
 {
     anim = GetComponent<Animator>();
     rb2d = GetComponent<Rigidbody2D>();
 }

 // Update is called once per frame
 void Update() {
     if (Input.GetKey(KeyCode.Space) && grounded == true) {
         jump = true;
     }
 }

 void FixedUpdate() {
     float h = Input.GetAxis("Horizontal");

     anim.SetFloat("Speed", Mathf.Abs(h));

     if (h * rb2d.velocity.x < maxSpeed)         //vai adicionar velociade ao jogador e manter no limite
         rb2d.AddForce(Vector2.right * h * moveForce);

     if (Mathf.Abs(rb2d.velocity.x) > maxSpeed)          //se o jogador passar do limite de velocidade ira baixar até o limite
         rb2d.velocity = new Vector2(Mathf.Sign(rb2d.velocity.x) * maxSpeed, rb2d.velocity.y);

     if (h > 0 && !facingRight)              //ira fazer o flip no sprite junto com a animação 
         Flip();
     else if (h < 0 && facingRight)
         Flip();

     if (jump) {
         // anim.SetTrigger("Jump"); 
         rb2d.AddForce(new Vector2(0f, jumpForce));
         jump = false;
     }
 }


 void Flip(){             //função de virar o script 
         facingRight = !facingRight;
     Vector3 theScale = transform.localScale;
     theScale.x *= -1;
     transform.localScale = theScale;
 }

 void onGroundCollision(Collision coll) {
     
 /if(Physics2D.OverlapCircle( , 5)){
         grounded = true;
     
             
     }


 }
Comment
Add comment · Show 4
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image sparkzbarca · Sep 01, 2016 at 07:18 PM 0
Share

do you mean to keep checking constnatly or do you mean you dont know the rest of the script?

if you want to continously check you need to place it in the fixed update loop by calling the function from inside it.

a simple script is

 bool IsGrounded()
 {
         if(Physics2d.overlapcircle(,5))
               return true;
         return false;
 }
 
 bool _IsGrounded;
 fixedupdate()
 {
  _IsGrounded = IsGrounded();
 }

now every fixed update frame the variable _IsGrounded will be updated to reflect if the player is grounded.

avatar image WeslleySousa sparkzbarca · Sep 04, 2016 at 02:49 PM 0
Share

the problem I'm having is that I can not do detect this crashing into the ground, I am using overlap circle but I am lost on how to place to detect which came into collision with the ground

avatar image ArturoSR · Sep 01, 2016 at 07:23 PM 0
Share

This method: void onGroundCollision(Collision coll), is yours or from unity?, if it is from unity, you need to check the syntax about it, at contrary, you need to check which contact point was detected, check the documentation about it, cheers.

avatar image sparkzbarca ArturoSR · Sep 01, 2016 at 07:25 PM 0
Share

it's his, unity defined definitions are generally highlighted in some way. You'll notice Update and FixedUpdate are in purple.

3 Replies

· Add your reply
  • Sort: 
avatar image
1

Answer by b1gry4n · Sep 01, 2016 at 11:01 PM

I find raycasting works better for checking if you are grounded or not

     public float groundedHeight = 0.5f; // the height above ground to determine if the player is grounded
     public float checkRate = 1.0f; // how often in seconds we check to see if we are grounded
     public bool grounded = false;// is grounded or not
     public LayerMask groundLayer;//the layer on which we can be grounded
     public float heightOffset = 0.25f; // we dont want to cast from the players feet (may cast underground sometimes), so we offset it a bit
 
     void Start()
     {
         InvokeRepeating("GroundCheck", 0, checkRate);
     }
 
     void GroundCheck()
     {
         if (Physics.Raycast(new Vector3(transform.position.x, transform.position.y + heightOffset, transform.position.z), Vector3.down, groundedHeight + heightOffset, groundLayer))
         {
             grounded = true;
         }
         else {
             grounded = false;
         }
     }
Comment
Add comment · Show 2 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image WeslleySousa · Sep 04, 2016 at 02:41 PM 0
Share

It's a 2D game, but i get the idea thanks

avatar image kubajs · Mar 09, 2017 at 10:02 PM 0
Share

It's probably faster but not that precise. It depends on situation. When you need to check whole width of the player or another object, you'd need to cast more raycasts / linecasts, not only one. Otherwise when staying on some edge, raycast/linecast wouldn't detect the desired collider. If you need a precise check, you need to use spherecast / boxcast or something similar appropriate to the object shape.

avatar image
0

Answer by Dream_in_code · Sep 04, 2016 at 03:23 PM

alt textpublic bool grounded = false;

 float groundcheckRadius = 0.1f;

 public LayerMask groundLayer;

 public Transform groundcheck;

grounded = Physics2D.OverlapCircle(groundcheck.position, groundcheckRadius, groundLayer);

make an empty gameobject named "groundcheck" and put it right under your player.alt text

drag the "groundcheck" gameobject to groundcheck field and make sure ground layer is selected for ground layer


screenshot-2.jpg (22.1 kB)
screenshot-3.jpg (27.2 kB)
Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image
0

Answer by biswasarnav2180 · Sep 14, 2021 at 05:08 AM

using System.Collections; using System.Collections.Generic; using UnityEngine;

public class playermovement : MonoBehaviour { public float JumpHeight; Rigidbody2D rb; float move; public float speed; // Start is called before the first frame update void Start() { rb = GetComponent(); }

 // Update is called once per frame
 void Update()
 {
     // Right left movement
     move = Input.GetAxis("Horizontal");
     rb.velocity = new Vector2(move * speed, rb.velocity.y);

      
     
     if (Input.GetButtonDown("Jump"))
     {
         rb.velocity = new Vector2(rb.velocity.x, JumpHeight);
     }
    

     
     
        
     
 }

}

Comment
Add comment · Show 1 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image biswasarnav2180 · Sep 14, 2021 at 05:08 AM 0
Share

same i also want help

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

9 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Multiple Cars not working 1 Answer

Distribute terrain in zones 3 Answers

Transform.position assign attempt not valid, and position is infinity on an object? 1 Answer

Illuminating a 3D object's edges OnMouseOver (script in c#)? 1 Answer

Persisting player when loading levels 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges