Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 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 slehmann101 · Feb 24, 2014 at 01:56 AM · 2dphysicsplatformerwallwalljump

Modifying physics in 2D

I have a 2D platformer game and in it I have recently implemented wall jumping, and the way I have it works great. However when one jumps with the character and moves towards the wall one can hold themselves stationary against the wall. This is something that I do not want. This is due to unity's inbuilt physics and is something that I would like to modify. I was wondering what the best way to go about this would be? This was quite difficult for me to explain and if you don't understand please don't hesitate to ask questions.

EDIT: Since the code was demanded I have it here: however I don't think it is to do with my code, I think that it is to do with the physics that unity employs.

 using UnityEngine;
 using System.Collections.Generic;
 
 public class Player_Movement : MonoBehaviour {
     public bool facingRight = true;    
     public float moveForce = 365f;            // Amount of force added to move the player left and right.
     public float maxSpeed = 5f;                // The fastest the player can travel in the x axis.
     public float jumpForce = 1000f;            //force added on jump
     private Transform groundCheck;
     private Transform [] leftWallCheck,rightWallCheck;    // A position marking where to check if the player is grounded.
     private bool grounded = false;    
     private bool jump=false;
     public float speed;
     public int dubJumpDivisor;
     private bool dubjump=false;
     private bool wallJumpEnabled,WallJumping;//prevents continuous wall jumping
     private List <HillSpawner> hillMovement;
     
     
     void Start(){
 
         hillMovement = new List<HillSpawner> ();
         //    hillMovement=GameObject.FindGameObjectWithTag("HillSpawners").GetComponent<HillSpawner>();
         GameObject[] hills=GameObject.FindGameObjectsWithTag("HillSpawners");
         for(int i = 0; i<hills.Length; i++){
             hillMovement.Add (hills[i].GetComponent<HillSpawner>());
         }
         
     }
     void Awake () {
         int aloc =0 , bloc =0;
         leftWallCheck=new Transform[2];
         rightWallCheck=new Transform[2];
         foreach(Transform b in transform){
             if(b.name=="leftWallCheck"){
                 leftWallCheck[aloc]=b;
                 aloc++;
             }
             if(b.name=="rightWallCheck"){
                 rightWallCheck[bloc]=b;
                 bloc++;
             }
         }
         // Setting up references.
         groundCheck = transform.Find("groundCheck");
 
     }
         // Update is called once per frame
     void Update () {
         // Check if grounded
         bool wallJump=false;
         grounded = Physics2D.Linecast(transform.position, groundCheck.position, 1 << LayerMask.NameToLayer("level"));  
         if(Physics2D.Linecast(transform.position, leftWallCheck[0].position, 1 << LayerMask.NameToLayer("level")) ||Physics2D.Linecast(transform.position, rightWallCheck[0].position, 1 << LayerMask.NameToLayer("level"))||Physics2D.Linecast(transform.position ,leftWallCheck[1].position, 1 << LayerMask.NameToLayer("level")) ||Physics2D.Linecast(transform.position, rightWallCheck[1].position, 1 << LayerMask.NameToLayer("level"))){
             wallJump = true; 
             }else{
             wallJumpEnabled = true;
         }
 
     
         if(wallJump&&wallJumpEnabled&&(Input.GetButtonDown("Jump")&&!grounded)){
             wallJumpEnabled = false;
                 WallJumping =true;
 
         }
 
         if(Input.GetButtonDown("Jump")&&!dubjump){
             
             if(!grounded){
                 dubjump=true;
             }
             
             jump=true;
         }
         movement();
     }
     void LateUpdate(){
         if(WallJumping){
             jumpUp((int)(jumpForce));
             WallJumping = false;
         }
         if(jump)//first jump
         {
 
             if(dubjump){
                 // Add a vertical force to the player.
                 jumpUp((int)(jumpForce/dubJumpDivisor));
             }else{
                 // Add a vertical force to the player.
                 jumpUp((int)(jumpForce));
             }
             
             
             
             
             
 
             // Make sure the player can't jump again until the jump conditions from Update are satisfied.
             jump=false;
         }
         
         if(grounded){dubjump=false;}
         movement();
     }
     void movement(){
         float h = Input.GetAxis("Horizontal");
         if(h * rigidbody2D.velocity.x < maxSpeed){
             // ... add a force to the player.
             rigidbody2D.AddForce(Vector2.right * h * moveForce);
             
             
         }
         // If the player's horizontal velocity is greater than the maxSpeed...
         if(Mathf.Abs(rigidbody2D.velocity.x) > maxSpeed){
             // ... set the player's velocity to the maxSpeed in the x axis.
             rigidbody2D.velocity = new Vector2(Mathf.Sign(rigidbody2D.velocity.x) * maxSpeed, rigidbody2D.velocity.y);
             //            backgroundUpdate.run(1.0f);
             
         }
         // If the input is moving the player right and the player is facing left...
         if(h > 0 && !facingRight)
             // ... flip the player.
             Flip();
         // Otherwise if the input is moving the player left and the player is facing right...
         else if(h < 0 && facingRight)
             // ... flip the player.
             Flip();
         
         // If the player should jump...
         for(int i =0; i<hillMovement.Count; i++){
             hillMovement[i].move(-h);
         }
         speed= Input.GetAxis("Horizontal");
     }
     private void jumpUp(int i){
         rigidbody2D.velocity=new Vector2(rigidbody2D.velocity.x,0f);//this sets y velocity to zero, should this be done
         
         rigidbody2D.AddForce(new Vector2(0f, i));
         
     }
     
     void Flip(){}
 }
Comment
Add comment · Show 3
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 Linus · Feb 24, 2014 at 02:16 AM 0
Share

Seeing the code you are currently using could help people help you. You could try experimenting with the physics materials, but if your script "locks" in place when touching the wall it will not help.

avatar image slehmann101 · Feb 24, 2014 at 02:52 AM 0
Share

note my edits

avatar image slehmann101 · Feb 24, 2014 at 02:54 AM 0
Share

Since it is a 2d game I have to use the physics2D$$anonymous$$aterial right? THe problem with this is that it only give two options; bounciness and friction. If I could change friction in the vertical plane only then I might be able to do something with it?

0 Replies

· Add your reply
  • Sort: 

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

20 People are following this question.

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

Related Questions

2D 360 degress platformer example needed 0 Answers

Need to restrict "air control" 2D platformer. 1 Answer

Should 2.5D use 3D or 2D settings ? 3 Answers

2D Slope acceleration 1 Answer

physics materials not showing up? 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