Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 14 Next capture
2021 2022 2023
2 captures
12 Jun 22 - 14 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 b2hinkle · Jul 17, 2018 at 06:23 AM · c#rigidbodycoroutineaddforcelerp

Lerp to target position in X amount of time

This script is attached to a pickupable item. I want to make this Item launch toward the player's position on start (so basically when it spawns). I want the item to be launched toward the player's position in an arc pathway. I have achieved this so far, but I want to make it so that depending on how far the item is from the player, it will launch at the player at different speeds, and heights. So for instance, if the item is right next to the player, it will launch slower, because it doesn't need to cover as much distance, and if it is farther away from the player, it will launch at the player faster (also having a higher arc).

Can anyone help with this I am really stuck

alt text

capture.png (32.1 kB)
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 Hellium · Jul 17, 2018 at 06:40 AM 0
Share

Please, edit your question and provide the code, not a picture of your code.

Then, it's not advised at all to mix Physics (rigidbody) with transform.position placement.

2 Replies

· Add your reply
  • Sort: 
avatar image
2

Answer by Hellium · Jul 17, 2018 at 07:10 AM

 using System.Collections;
 using UnityEngine;
 
 public class ItemLaunch : MonoBehaviour
 {
     /// <summary>
     /// The player to target
     /// </summary>
     [SerializeField]
     private Transform player;
 
     /// <summary>
     /// The curve giving the throw amplitude according
     /// to the distance to the player
     /// </summary>
     [SerializeField]
     private AnimationCurve distanceToAmplitudeFunction ;
 
     /// <summary>
     /// The start position
     /// </summary>
     private Vector3 startPosition;
 
     /// <summary>
     /// The target position
     /// </summary>
     private Vector3 targetPosition;
 
     /// <summary>
     /// The coroutine
     /// </summary>
     private IEnumerator coroutine;
 
     // Use this for initialization
     void Start ()
     {
         // Called in the Start method for the example,
         // but you can call it whenever you want
         // Here, I use an animation curve to determine the amplitude,
         // but you can use a plain function, like Vector3.Distance( player.position, transform.position ) * 2 for instance
         // or Mathf.Exp( Vector3.Distance( player.position, transform.position ) )
         Launch( 1, distanceToAmplitudeFunction.Evaluate( Vector3.Distance( player.position, transform.position ) ) );    
     }
 
     /// <summary>
     /// Launches the item
     /// </summary>
     /// <param name="duration">The flight duration.</param>
     /// <param name="amplitude">The throw amplitude.</param>
     public void Launch( float duration, float amplitude )
     {
         startPosition = transform.position;
         targetPosition = player.position;
 
         if ( coroutine != null )
             StopCoroutine( coroutine );
 
         coroutine = Fly( duration, amplitude );
         StartCoroutine( coroutine );
     }
 
     /// <summary>
     /// Flies during the specified duration
     /// </summary>
     /// <param name="duration">The flight duration.</param>
     /// <param name="amplitude">The throw amplitude.</param>
     /// <returns></returns>
     private IEnumerator Fly( float duration, float amplitude )
     {
         if ( duration > Mathf.Epsilon )
         {
             for ( float progress = 0 ; progress < duration ; progress += Time.deltaTime )
             {
                 transform.position = Vector3.Lerp( startPosition, targetPosition, progress / duration ) + Vector3.up * Mathf.Sin( progress / duration * Mathf.PI) * amplitude;
                 yield return null;
             }
         }
         transform.position = targetPosition ;
         coroutine = null;
     }
 }

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 b2hinkle · Jul 18, 2018 at 10:00 AM 0
Share

Hey thanks! This works well. However, I now want to make it so that the item follows the player's position even while he is moving away from the target position so that the item always collides with the player even if he runs away from it.

Can you help me integrate that into this code?

avatar image Hellium b2hinkle · Jul 18, 2018 at 10:43 AM 0
Share

You can call targetPosition = player.position; inside the for loop, inside the coroutine, but it may behave strangely. Then, you will have to set the parent of the object to the player, after the end of the for loop

avatar image
0

Answer by mayur7garg · Jul 17, 2018 at 07:19 AM

@b2hinkle Here you are using Lerp in the Update function with the start position as the current transform position. The transform position is also updated in the same function causing the pickup item to move closer to the player every frame. This is a common approach but the movement will seem rather independent of time. To make it time dependent, keep the start position constant and gradually change the lerp factor every frame. This can be achieved as follows- In the start method, initialize a timer = 0f. This timer will be our lerp factor and will go from 0 to 1 where timer at 0 denotes that the pickup is at the start position and 1 denotes that it has reached the player. In the update method, try this -

 timer += Time.deltaTime/n;
 if (timer<1){
 transform.position = Vector3.Lerp(startPosition, player.transform.position, timer);
 }

Please note that here n denotes the no. of seconds taken for the coin to move from its start position to the player.

Setting n = 1 will complete the journey in 1 second, =2 in 2 seconds and so on. Adjust it to get the required speed. Also note that in the Lerp function, my first argument is the startPosition (which you have initialized in the Start method and doesn't change with time for this item instead of transform.position which was being changed every frame in your code. Hope it works!

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

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

Jumping with rigid body3d 1 Answer

better way to rotate instead Coroutine 1 Answer

how get bow to add more force over time 0 Answers

Why is my Mathf.Lerp not lasting for the intended duration, even though I'm not using Time.time as the t variable? 1 Answer

Help using Lerp inside of a coroutine. 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