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 /
  • Help Room /
avatar image
0
Question by Phosphorus2500 · Apr 19, 2016 at 08:28 PM · animationanimatorrigidbody2danimator controllerconstraints

Animation transform lock

Hi all,

I'm trying to freeze the Y position of a prefab instantiated into a scene while the Default non-looped animation plays, then when the animation finishes I would like the Y position to be unfrozen.

So far I have the below code which freezes the Y position of the prefab when it is instantiated, and it plays its Default animation once as intended from the Animator controller.

My problem is I have no idea how to unfreeze the Y position when the animation is finished, as I'm unable to figure out what code to use to check when the animation is playing and when its finished. I'm using an Animator Controller, and I did some searching already that used code from the Animation component, but I'm not using this, and when I tried to add it, it started complaining about setting animation clips to Legacy. I'm a bit lost now and am giving up on searching for myself.

Current code:

 using UnityEngine;
 using System.Collections;
 
 public class PoopAnimator : MonoBehaviour {
 
     Animation anim;
 
     // Use this for initialization
     void Start () {
         anim = GetComponent<Animation>();
     }
 
     // Update is called once per frame
     void Update()
     {      
         gameObject.GetComponent<Rigidbody2D>().constraints = RigidbodyConstraints2D.FreezePosition;
     }
 
 }
 

Please help :)

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 incorrect · Apr 19, 2016 at 08:31 PM 0
Share

Doing GetComponent() every frame is a bad habbit. Get rid of it. ;)

Ins$$anonymous$$d store a reference to a component and use GetComponent() in Start() to get it.

2 Replies

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

Answer by incorrect · Apr 19, 2016 at 08:30 PM

You can add Animation Events into your animation: one at the start to switch on your script, one at the end to switch it off.

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 Phosphorus2500 · Apr 20, 2016 at 07:14 PM 1
Share

I knew nothing about Animation Events before your answer, I looked them up and it works perfectly and oh so simply. Thanks!

avatar image
1

Answer by Phosphorus2500 · Apr 20, 2016 at 07:18 PM

For anyone in the future just learning Unity like I am and needs to know this, the following is how I got around the issue: Animation Events.

Firstly, I created a new script and attached it to the object in question. The script is as follows:

 using UnityEngine;
 using System.Collections;
 
 public class PoopAnimator : MonoBehaviour {
 
     Rigidbody2D rigBod;
 
     // Use this for initialization
     void Start ()
     {
         rigBod = GetComponent<Rigidbody2D>();
     }
 
     // Update is called once per frame
     void Update()
     {      
         
     }
 
     void FreezePoop() /*Function used in Animation Event where all constraints for the Rigidbody2D are frozen.*/
     {
         rigBod.constraints = RigidbodyConstraints2D.FreezePosition;
     }
 
     void UnfreezePoop() /*Function used in Animation Event where all constraints for the Rigidbody2D are unfrozen.*/
     {
         rigBod.constraints = RigidbodyConstraints2D.None;
     }
 }

Then, for the animation in question where I wanted the object's Y position frozen, I added two Animation Events. One at the beginning of the animation, and one at the end. I assigned the Freeze function to the starting Event, and the Unfreeze function to the finishing event. Hey-presto!

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

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

4 People are following this question.

avatar image avatar image avatar image avatar image

Related Questions

Animation clip not playing but still affecting components of other clips 0 Answers

Animator doesn't change animation in Update() function 0 Answers

Animator in child receives float from parent but animation doesn't change when condition is met. 1 Answer

Animating physics problem 1 Answer

MobController 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