• 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 unity_i0W6HQ-YEHqs4Q · Nov 05, 2019 at 04:35 AM · scaling

how to properly scale gameobject in script

I'm trying to make a gun that the bullets growing in size while you hold down the fire key i got it working by just creating multiple instances of the object but i cant figure out how to destroy them after the next object is place. is there a better to scale it as to not run into this problem?

heres my code:

using System.Collections; using UnityEngine;

public class gunfire : MonoBehaviour { public Rigidbody projectile; public Transform chargeSpawn; public GameObject bubble;

 public Transform spawnpoint;
 public bool isGrowing = false;

 IEnumerator growCoroutine;
 void Start()
 {
     growCoroutine = growCor();
 }

 private void Update()
 {
     if (Input.GetMouseButtonDown(0))
         growStart();
     if (Input.GetMouseButtonUp(0))
         growStop();
 }
 IEnumerator growCor()
 {
     
     while (isGrowing) {
         Instantiate(bubble, spawnpoint.position, spawnpoint.rotation);
         bubble.transform.localScale += new Vector3(0.025f, 0.025f, 0.025f);
         var radius = transform.localScale.y;
         
         if (radius == 3.7) {
             growStop();
         }
         yield return null;

     }
 }


 void growStart() {
     if (!isGrowing) {
         isGrowing = true;
         StartCoroutine(growCoroutine);
     }
 }

 void growStop() {
     if (isGrowing)
     {
         StopCoroutine(growCoroutine);
         isGrowing = false;
         bubble.transform.localScale = new Vector3(1f, 1f, 1f);
         var radius = transform.localScale.y;
         float speed = (100 / radius);
         Rigidbody InstantiateProjectile = Instantiate(projectile, transform.position, transform.rotation) as Rigidbody;
         InstantiateProjectile.velocity = transform.TransformDirection(new Vector3(speed, 0, 0));
     }
 }

}

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

Answer by GrayLightGames · Nov 05, 2019 at 05:59 AM

Hi @unity_i0W6HQ-YEHqs4Q, so to clarify, if the player holds the button down, a bubble begins to form on the player's gun and grows. Then on release, the bubble becomes a projectile. Is that what you intend?

I don't have a lot of experience with Coroutines, I usually just do operations like this inside class Update functions. Are you using Coroutines for a performance reason?

Either way, I don't think you'd need to instantiate new objects to accomplish this effect... just create a growingBubble variable to refer to the bubble that is growing, then scale it and move it to the spawnpoint in the while loop... this is assuming the player can move while the bubble is growing so you need to have the bubble follow the gun. I would also recommend using a variable for the grow rate so you can experiment with it in the inspector at runtime. Something like this:

 GameObject growingBubble;
 float growRate = 0.025f;

 IEnumerator growCor()
  {
      growingBubble = Instantiate(bubble, spawnpoint.position, spawnpoint.rotation);
      while (isGrowing) {
          growingBubble.transform.localScale += Vector3.one * growRate;
          growingBubble.transform.position = spawnpoint.position;
          var radius = transform.localScale.y;
          
          if (radius == 3.7) {
              growStop();
          }
          yield return null;
      }
  }

I don't see how you are currently using the grown bubble to shape your projectile, but with a variable in your class, you could access it inside growStop() how you need to. If you want the bubble to grow smoothly with time, you should also involve Time.deltaTime when you apply the growRate. There's a number of articles and tutorials out there about how to properly use deltaTime to change objects smoothly with time.

Hope that helps!

Comment
Add comment · Show 3 · 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 unity_i0W6HQ-YEHqs4Q · Nov 05, 2019 at 06:19 AM 0
Share

thanks man this really helps a lot

avatar image GrayLightGames unity_i0W6HQ-YEHqs4Q · Nov 05, 2019 at 02:48 PM 0
Share

Glad I could help, good luck with your project! Please accept the answer if that resolves it for you.

avatar image cdr9042 · Nov 05, 2019 at 07:27 AM 0
Share

yeah, Update() is a better thing to do, I hate Coroutine + while() yield with a passion

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.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

116 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

Related Questions

changing camera view 3 Answers

Problem scaling parent without scaling child 0 Answers

GUI box scaling issue [C#] 0 Answers

Is this the correct way to scale my GUI? 1 Answer

My prefab is applying scale changes when hitting apply 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