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 /
This post has been wikified, any user with enough reputation can edit it.
avatar image
0
Question by CyberArtist · Aug 23, 2014 at 03:45 AM · animationjavascriptcontrollerjumpingfalling

Fall animation when character is falling

As far as my controller script is set up. When I press the jump key, the "Jump" animation plays. However, the "FallDown" animation plays immediately after and keeps playing until my character is grounded. I tried some adjustment with my scripts but had no luck.

  1. I want my "Jump" animation to play then clamp on the last frame until I my y velocity is <= 0.

  2. I want my "FallDown" animation to play when I start falling (y velocity < 0).

  3. I'll add a "Land" animation latter, so I don't want the "FallDown" animation playing when my character is grounded.

Please feel free to add suggestions/solutions.

Here's the parts of my scripts that involve the jumping:

     //In air animations
     else
     {
         if(Input.GetButtonDown("Jump"))
         {
             animation.CrossFade("Jump");
             animation["Jump"].speed = 3;
         }
         
         if(!playerController.IsGrounded())
         {
             animation.CrossFade("FallDown", 0.5);
             animation["FallDown"].speed = 3;
         }
     }

(Controller)

 //Private, helper variables
 private var moveDirection = Vector3.zero;
 private var grounded : boolean = true;
 private var moveHorz = 0.0;
 private var normalHeight = 2.0;
 private var crouchHeight = 1.7;
 private var rotateDirection = Vector3.zero;
 
 private var isCrouching : boolean = false;
 private var isRunning : boolean = false;
 
 //Cache controller so we only have to find it once
 var controller : CharacterController;
     controller = GetComponent(CharacterController);
 var MoaliaStatus : Moalia_Status;
 MoaliaStatus = GetComponent(Moalia_Status);
 
 //Move the controller during the fixed frame updates
 function FixedUpdate()
 {
     if(!isControllable)
         Input.ResetInputAxes();
 
     else
     {
         if(grounded)
         {
             //Since we're touching something solid, such as the ground, allow movement
             //Calculate movement directly from input axes
             moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
             moveDirection = transform.TransformDirection(moveDirection);
             moveDirection *= walkSpeed;
             moveDirection.y -= gravity * Time.deltaTime;
             
             //Find rotation based upon axes if need to turn
             moveHorz = Input.GetAxis("Horizontal");
             if (moveHorz > 0)    //Right turn
                 rotateDirection = new Vector3(0, 1, 0);
             else if (moveHorz < 0)    //Left turn
                 rotateDirection = new Vector3(0, -1, 0);
             else    //not turning
                 rotateDirection = new Vector3(0, 0, 0);
             
             //Jump controls    
             if(Input.GetButton("Jump"))
             {
                 inair = true;
                 if(Input.GetButton("Run") && Input.GetButton("Jump"))
                 {
                     moveDirection.y = jumpSpeed/2;
                 }
                 else
                 {
                     moveDirection.y = jumpSpeed;
                 }
             }
             
             //Aplly any boosted speed
             if(Input.GetButton("Run") && Input.GetAxis("Vertical"))
             {
                 if(MoaliaStatus.stamina > 0)
                 {
                     isRunning = true;
                     if(MoaliaStatus)
                     {
                         moveDirection *= runSpeed;
                         MoaliaStatus.stamina -= MoaliaStatus.runUsage * Time.deltaTime;
                         isRunning = true;
                     }
                 }
                 else if(MoaliaStatus.stamina <= 0)
                 {
                     isRunning = false;
                 }
             }
             
             if(MoaliaStatus)
             {
                 if(MoaliaStatus.stamina <= MoaliaStatus.maxStamina)
                 {
                     MoaliaStatus.stamina += MoaliaStatus.staminaRecharge * Time.deltaTime;
                 }
             }
         }


 function IsGrounded()
 {
     return grounded;
 }



Comment
Add comment · Show 1
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 CyberArtist · Aug 23, 2014 at 03:35 PM 0
Share

Updated Animation Script:

 if(!playerController.IsGrounded() && playerController.moveDirection.y < 0)
         {
             animation.CrossFade("FallDown", 0.5);
             animation["FallDown"].speed = 3;
         }

I also had to change the moveDirection variable as public.

3 Replies

· Add your reply
  • Sort: 
avatar image
1

Answer by LessThanEpic · Aug 23, 2014 at 03:49 AM

Add an extra condition to your if statement for the falling animation. Something like:

         if(!playerController.IsGrounded() && playerController.velocity.y < 0)
         {
             animation.CrossFade("FallDown", 0.5);
             animation["FallDown"].speed = 3;
         }
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 CyberArtist · Aug 23, 2014 at 01:28 PM 0
Share

That got me this error:

"NullReferenceException: Object reference not set to an instance of an object Boo.Lang.Runtime.RuntimeServices.GetDispatcher (System.Object target, System.String cache$$anonymous$$eyName, System.Type[] cache$$anonymous$$eyTypes, Boo.Lang.Runtime.DynamicDispatching.DispatcherFactory factory) Boo.Lang.Runtime.RuntimeServices.GetDispatcher (System.Object target, System.Object[] args, System.String cache$$anonymous$$eyName, Boo.Lang.Runtime.DynamicDispatching.DispatcherFactory factory) Boo.Lang.Runtime.RuntimeServices.GetProperty (System.Object target, System.String name) UnityScript.Lang.UnityRuntimeServices.GetProperty (System.Object target, System.String name) $$anonymous$$oalia_Animation.Update () (at Assets/Scripts/Character/$$anonymous$$oalia_Animation.js:83)"

Note: In case you changes involve me using a rigid body. I'm only using a character controller.

avatar image
0

Answer by Andres-Fernandez · Aug 23, 2014 at 03:37 PM

Check this tutorial. The part with the blend tree might be helpful.

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 CyberArtist · Aug 23, 2014 at 04:28 PM 0
Share

I'm following a book which does not use blend trees.

avatar image
0

Answer by Cherno · Aug 23, 2014 at 06:11 PM

Have a look at this tutorial:

Creating a controllable character

It determines the zenit of the jump and thus you can easily play a falling animation after the character has jumped up in the air and is coming down again.

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 CyberArtist · Aug 24, 2014 at 04:02 PM 0
Share

I'll have to rewrite the entire script (or any additional scripts). If I set the Wrap$$anonymous$$ode to clamp, how can I make it go back to idle or any movement animation when it is grounded?

avatar image Cherno · Aug 24, 2014 at 05:14 PM 0
Share

This is all detailed in the tutorial. The idle animation plays continously in the background but gets overweighted by running and jumping if certain criteria are met.

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

5 People are following this question.

avatar image avatar image avatar image avatar image avatar image

Related Questions

Scripting and Animation problems 1 Answer

Jumping, falling, and landing animations. 1 Answer

Textured jump animation moving left and right while in the air -help! 1 Answer

Character fall animation 1 Answer

Adding Jumping and Falling Animations 0 Answers


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