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
1
Question by gitlinjoss · Jan 17, 2020 at 11:03 PM · animationscripting problemrigidbodyvelocityempty game object

calculate velocity of animated parent rigidbody from script inside child

basically I have a character that needs to change from idle to walk position when it's moving. I've placed it inside an empty object (Character Parent) that I'm moving in the Z axis using animation (so it should have a Z velocity) and have defined the character parent as a rigidbody. Yet Z velocity using Debug.log(rb.velocity.z) shows up as 0. Here is my script, I've tried enabling "Animate Physics" but that didn't work. New to unity so I'm sure this is a simple fix

public class IdleToWalk : MonoBehaviour { public Animator animate; public bool isWalking;

 void Start()
 {
     animate = this.gameObject.GetComponent<Animator>();
 }

 void Update()
 {
     Rigidbody rb = GetComponentInParent<Rigidbody>();
     if (rb.velocity.z == 0) animate.SetBool("isWalking", false);
     else animate.SetBool("isWalking", true);
 }

}

Comment
Add comment
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

2 Replies

· Add your reply
  • Sort: 
avatar image
1
Best Answer

Answer by lgarczyn · Jan 18, 2020 at 07:38 PM

Few problems here!


First, you shouldn't move a rigidbody using its transform. Because you are doing that, the rigidbody doesn't realize it is moving, and therefore velocity is always 0.


Your other problem is that your animation speed might not match your actual speed. You could use SetFloat to send the z velocity to your animator, so that you can accelerate the animation when needed.


To move a rigidbody, there's a few different tools:


If it is not kinematic, use rigidbody.velocity or rigidbody.AddForce. For example

 rigidbody.velocity = Vector3.forward * Input.GetAxis("Vertical") * playerSpeed;


If it is kinematic, use MovePosition:

 rigidbody.MovePosition(rigidbody.position + Vector3.forward * (Input.GetAxis("Vertical") * playerSpeed * Time.fixedDeltaTime)); 


If you use a CharacterController, use Move or SimpleMove.


Only use transform.position if you don't have a rigidbody or CharacterController.


Only use rigidbody.position if you want to teleport your rigidbody instead of moving it continuously.

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 gitlinjoss · Jan 18, 2020 at 08:50 PM 0
Share

Ok so based on your response I think using move or simple move will be the best thing for me since I am using a character controller. However, because I'm making an animation ins$$anonymous$$d of a game, I need the character to move automatically without user input, so am I wrong to use a character controller?

Ps. You're right about my animation not matching the actual speed.

avatar image lgarczyn gitlinjoss · Jan 19, 2020 at 05:51 AM 0
Share

Oh, then it's a different problem.

Animations are meant to move non-colliders, or kinematic rigidbodies with "animate physics" enabled.

What you're doing is closer to a cutscene technically. With an animation taking control of a character ins$$anonymous$$d of user input or AI.


If the animation is always enabled, I would recommend removing any rigidbody and character controller, and simply using a script like this, on Update:

  float velocity = (transform.position - prevPos).magnitude / Time.deltaTime;
  animator.SetFloat("Speed", velocity);
 animator.SetBool("Walking", velocity > 0.001f);
 prevPos = transform.position;

with the private var

 Vector3 prevPos;

Initialized on OnEnable to transform.position

avatar image
1

Answer by mscardinal · Jan 18, 2020 at 06:37 PM

@gitlinjoss I assume your animation moves the character instead of adding a velocity to its rigidbody. So only transform.position.z changes and not rigidbody.velocity.z

Comment
Add comment · Show 10 · 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 gitlinjoss · Jan 18, 2020 at 06:45 PM 0
Share

Yes that's exactly what happens, transform.position.z is changing but rigidbody.velocity.z isn't. How do I add a velocity to it's rigidbody? Is that possible with animation?

avatar image mscardinal · Jan 18, 2020 at 06:48 PM 1
Share

I just realized that rb.velocity is read only so no. But you can set a trigger in the animation then read that from script and add velocity through the script. A bit complicated but possible.

avatar image gitlinjoss · Jan 18, 2020 at 07:14 PM 0
Share

I think what I'll do, since transform.position.z is changing, is create a script that calculates the velocity based on it's change in position. Seems a bit easier. Thanks for the responses man!

avatar image mscardinal · Jan 18, 2020 at 07:18 PM 0
Share

no problem but i see some problems youll run into but thats not my problem ;) anyways you know where you can get help

avatar image lgarczyn mscardinal · Jan 18, 2020 at 07:27 PM 0
Share

RigidBody.velocity is definitely not readonly.

avatar image mscardinal lgarczyn · Jan 18, 2020 at 07:28 PM 0
Share

for animation it is

Show more comments

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

387 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

How to calculate the speed at which a rigidbody2d is actually moving ? 1 Answer

What is wrong with this rigidbody? 2 Answers

Character Joints and Animations results in strange physic animation 1 Answer

When I try to save the velocity of a rigidbody and use it later it doesn't work? 1 Answer

Can't access rigidbody commands 'Rigidbody' does not contain a definition for... 2 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