Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 14 Next capture
2021 2022 2023
2 captures
13 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 aLovedHater · Sep 18, 2021 at 03:34 AM · scaling

How to scale an object to a certain size over a certain period of time(in seconds lets say)

So i've been trying to figure out what equation i need to use to be able to achieve what is mentioned in the post title. first i tried something like:

 gameObject.transform.localScale  += (new Vector3(0.1f, 0f, 0.1f) * (-gameObject.transform.localScale.x * Time.deltaTime))/10;

which didnt work. I then tried:

 gameObject.transform.localScale = Vector3.Lerp (transform.localScale, new Vector3(5f,5f,5f), 10f * Time.deltaTime);

which also didnt quite work :( can anyone tell me what im missing?

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

1 Reply

· Add your reply
  • Sort: 
avatar image
0

Answer by Eno-Khaon · Sep 18, 2021 at 04:00 AM

Using Time.deltaTime as part of the "time" (namely, "t") argument in Linear Interpolation is almost always a terrible idea, and I never understand why it's done so frequently. Essentially, it removes the "Linear" element and makes it state/luck-dependent on exactly how it plays out without being able to reach its goal.

If you want an "animated" Lerp() function to play out, well, linearly, you'll want a fixed start and end point, with a "t" value that ranges from 0-1 over a given length of time.

 // This example is based around multiplication for more efficient math
 private float fScaleTime;
 public float scaleTime
 {
     get
     {
         if(fScaleTime == 0f)
         {
             return 0f;
         }
         else
         {
             return 1.0f / fScaleTime;
         }
     }
     set
     {
         if(value == 0f)
         {
             fScaleTime = 0f;
         }
         else
         {
             fScaleTime = 1.0f / value;
         }
     }
 }
 
 // An editor-facing initial value, since the property would be hidden in the Inspector
 [SerializeField]
 private float initialScaleTime = 5.0f;

 public Vector3 startingScale = Vector3.one * 0.1f;
 public Vector3 endingScale = Vector3.one * 5.0f;
 
 private float lerpT = 0f;
 
 void Start()
 {
     // Set the property to the Inspector value
     scaleTime = initialScaleTime;
     // Redundant in Start() in this case, but included for general context
     lerpT = 0f;
 }
 
 void Update()
 {
     // Simple example, no conditions involved for this
     transform.localScale = Vector3.Lerp(startingScale, endingScale, lerpT * fScaleTime);
     lerpT += Time.deltaTime;
 }


Edit: Fixed an obvious typo

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 aLovedHater · Sep 18, 2021 at 09:30 PM 0
Share

I haven't used get/set in a long time in C# and i happen to get some errors im a little confused about. my full code:

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class Zone : MonoBehaviour
 {
     ZoneStuff zoneStuff;
     bool canReplace = true;
 
     // An editor-facing initial value, since the property would be hidden in the Inspector
     [SerializeField]
     private float initialScaleTime = 5.0f;
     public Vector3 startingScale = Vector3.one * 0.1f;
     public Vector3 endingScale = Vector3.one * 5.0f;
     
     private float lerpT = 0f;
 
     private float fScaleTime;
     public float scaleTime
     {
         get
         {
             if(fScaleTime == 0f)
             {
                 return 0f;
             }
             else
             {
                 return 1.0f / fScaleTime;
             {
         }
         set
         {
             if(value == 0f)
             {
                 fScaleTime = 0f;
             }
             else
             {
                 fScaleTime = 1.0f / value;
             }
         }
     }
 
     void Awake()
     {
         zoneStuff = GameObject.Find("GameManager").GetComponent<ZoneStuff>();
     }
     
     // Start is called before the first frame update
     void Start()
     {
         // Set the property to the Inspector value
         scaleTime = initialScaleTime;
         // Redundant in Start() in this case, but included for general context
         lerpT = 0f;
     }
 
     // Update is called once per frame
     void Update()
     {
          // Simple example, no conditions involved for this
         transform.localScale = Vector3.Lerp(startingScale, endingScale, lerpT * fScaleTime);
         lerpT += Time.deltaTime;
     }
     
     void OnTriggerEnter(Collider other)
     {
         if(other.gameObject.tag == "Zone")
         {
             if(canReplace)
             {
                 canReplace = false;
                 zoneStuff.ReplaceZone(this.gameObject);
             }
         }
     }
 }


errors: line 32, CS1002: ; expected line 45, CS1513: } expected

avatar image Eno-Khaon aLovedHater · Sep 21, 2021 at 06:28 PM 0
Share

Whoops, I made a typo, and put a second starting brace ({) where there should have been an ending brace (}).

This is a pretty good reason to not blindly copy/paste code.

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

125 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

Related Questions

Collider Doesn't Rotate in Sync With Mesh 1 Answer

Junior Programming Pathway scaling a cube 2 Answers

How do I offset the scaling center for a cube 1 Answer

Memory Usage on resize 1 Answer

Scaling an instantiated object based on prefab, but not prefab 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