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 dotEff · May 19, 2016 at 04:56 AM · collidertransform.positiontime.deltatimeontriggerstay

How to fix box drop via code animation?

I'm currently making a box puzzle game and so far I've used Time.deltaTime with player position to make box move.

But here I want the box to fall into the gap but instead of dropping in smoothly, the box snaps into the final position while being push animated.

Here's the code for the drop:

 void OnTriggerStay(Collider Other)
     {
         if (Other.CompareTag("TEMP_COL")) {
             Other.enabled = false;
             Vector3 BoxStart = BoxHeight.position;
             Vector3 BoxDestination = BoxHeight.position + Other.transform.up * -1.8f;
             
             float DropTime = 0.0f;
 
             while (DropTime < MoveSpeed) {
             Vector3 FinalBox = Vector3.Lerp (BoxStart, BoxDestination, DropTime / MoveSpeed);
 
                 BoxHeight.position = FinalBox;
                 DropTime += Time.deltaTime;
             }
         }
 }

The TEMP_COL is an invisible collider that prevents the player from passing through unless a box have dropped into it.

Am I not using the correct code to animate the drop? Or is it wrong to use OnTriggerStay?

Animated GIF sample

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
0
Best Answer

Answer by dotEff · Nov 11, 2016 at 08:34 AM

In the end I use IEnumerator for dropping the box and disable the TEMP_COL. Here's the IEnumberator code for dropping the box once the box collides with TEMP_COL:

 IEnumerator DropBox(Vector3 BoxStart, Vector3 BoxDestination, float MoveSpeed){
         float DropTime = 0.0f;
 
             GetComponent<BoxCollider> ().enabled = false;
 
         while (DropTime < MoveSpeed) {
             Vector3 FinalBox = Vector3.Lerp (BoxStart, BoxDestination, DropTime / MoveSpeed);
 
             BoxHeight.position = FinalBox;
             DropTime += Time.deltaTime;
             // stop execution for one frame
             yield return new WaitForEndOfFrame();
         }
     }

First it disables the temporary collider, allowing the player to go through/over the dropped box. As for the dropping I use the same deltaTime code but have it in an IEnumerator which solves the issue where the box drop smoothly instead of snapping straight into position.

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 Masterio · May 19, 2016 at 10:46 AM

Try this:

         if (value < 1f)
         {
               value +=  speed * Time.deltaTIme; // value is class field of float type
               box.transform.position = Vector3.Lerp (BoxStart, BoxDestination, value);
         }
            

I think you should make 2 phase for that, first for move the box to the drop position and then move the box down to the final destination. Current case will move the box to the final position (box will move through the ground).

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

Find all objects inside box collider 4 Answers

How to use OnTriggerEnter with multiple triggered objects? 1 Answer

Grab and Drop GameObject with the same Key. 0 Answers

C# OnTriggerStay Collider Problem 1 Answer

Tower, get target within range by mouseclick 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