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 Cuki · Jun 30, 2018 at 12:51 PM · c#2drotationprogrammingforce

How to rotate an instance relative to the parent and give it force?

I have a GameObject that rotates itself and has 4 guns that are children, I created the empty GameObject at the end of every gun and I would like to instantiate the bullet prefab the way the gun is rotated and give them force to go to that direction Here is how the game looks: https://imgur.com/a/qpIEuRk And this is my script to spawn, but don’t know how to give force:

 public GameObject bullet;
  public Transform gun;
  public float time;
 void Spawn()
  {
  Instantiate(bullet, transform.position, gun.transform.rotation);
  }
 void Start()
  {
  Invoke("Spawn", time);
  }


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 Ermiq · Jun 30, 2018 at 07:32 PM

You need to change bullet's position in Update(). For example you could do this:

Change your instantiate code:

 //Make an array to store all instantiated bullets.
 // we'll need this to move each bullet in it's own direction later
 private ArrayList bullets = new ArrayList ();
 
 private void Spawn()
 {
     //Store instantiated bullet as local variable 'clone'
 GameObject clone = Instantiate (bullet, transform.position, gun.transform.rotation);
     //Add bullet to the list
 bullets.Add (clone);
     //Call delayed method to delete bullet which is first in the bullets array
     // we need it to prevent performance issues when there's too much bullets in the scene
     // so we're adding 1 new bullet and deleting 1 old bullet
     Invoke ("DestroyBullet", 2f); //bullet will be destroyed in 2 seconds
 }

 private void DestroyBullet ()
 {
     GameObject bulletToDestroy = bullets[0] as GameObject; //very first bullet in the array
     bullets.RemoveAt (0); //remove bullet from the array
     Destroy (bulletToDestroy); //destroy bullet's gameObject itself
  }

Now in Update() you'll change each bullet's position:

 void Update ()
 {
      //Moving every bullet in the array relative to it's position and direction
      for (int i = 0; i < bullets.Count; i++) {
     GameObject bullet = bullets [i] as GameObject;
     bullet.transform.position =
                 bullet.transform.position + bullet.transform.forward * Time.deltaTime;
                 //Time.deltaTime here
                 //is a multiplier for move speed. Now bullet will move for 1 meter per second.
      }
 }
Comment
Add comment · Show 5 · 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 Cuki · Jun 30, 2018 at 08:44 PM 0
Share

The Rotator (big black dot with 4 guns) moves around scene and rotates at the same time, with your code, this is the result: https://imgur.com/a/Fw3fFx1 ;


So I changed a part of your code:

//GameObject clone = Instantiate(bullet, transform.position, gun.transform.rotation); GameObject clone = Instantiate(bullet); //Instantiate the bullet clone.transform.rotation = transform.parent.rotation; //Set the rotation of the clone to the rotation of the parent (gun) And this is the result: https://imgur.com/a/9uCQ5ls


But none of the solutions has the velocity or force, the bullet just stays where it spawns and destroys after two second

avatar image Ermiq · Jul 01, 2018 at 03:25 AM 0
Share

Ok, let's figure out who is who in your project. Rotator is the big dot. Guns are children of the Rotator, right? And these guns have empty game objects as children attached to edges of the guns, right? So hierarchy of Rotator in editor looks like this:

R

otator

-> Gun1 -->Gun edge1 (empty game object) -> Gun2 -->GunEdge2 (empty) -> Gun3 -->GunEdge3 ->Gun4 -->GunEdge4 Right? If the script is attached to the Rotator then 'transform' will return the Rotator's transform, so when you write clone.transform.rotation = transform.parent.rotation; you're applying Rotator's parent rotation to the bullet. It's not good. To make it work correctly, you should check GunEdge's positions and directions in editor, their blue arrows (Z axis) should point to the direction away from the Rotator. These arrows represent their 'transform.forward' vectors which you need to apply direction for bullets to go to. And when you instantiate a bullet you should set its position to GunEdge's position, and rotation to GunEdge's rotation. Hmm... Looks like we need to deter$$anonymous$$e at which GunEdge the bullet going to be instantiated as well. But at first, we need to make it work with one of the guns at least. $$anonymous$$ake a public variable of type Transform in your script, name it 'GunEdge', attach the script to the Rotator, drag and drop one of your GunEdge empty objects on this variable field in the inspector window. $$anonymous$$ake sure this gun edge has a proper direction (blue Z axis points away from the Rotator's center). Then try to instantiate a bullet with: GameObject clone = Instantiate (bullet, GunEdge.position, GunEdge.rotation);
avatar image Cuki Ermiq · Jul 01, 2018 at 11:55 AM 0
Share

The script is attached to the empty gameobject at the end of the gun and spawns the bullet just perfect, here is the screenshot: https://imgur.com/a/v4Iv4$$anonymous$$S


Bullets are at the position where the guns where a couple of frames before, I can't screenshot with perfect ti$$anonymous$$g but it works, it works with this script:

 GameObject clone = Instantiate(bullet); //clone has the value of instantiating the bullet
 clone.transform.rotation = transform.parent.rotation; //Set the value of clone rotation to the rotation of it's parent (gun)

Now it's just the force we need, if transform.forward is used, most probably it wouldn't work as it would affect the Z axis, my game is 2D, so we need X, Y only

avatar image Ermiq · Jul 02, 2018 at 05:23 PM 0
Share

@Cuki Oh, sorry, I completely forgot it's a 2D. In 2D you need to use 'transform.up' or 'transform.right' to move object at its X or Y axis. In 2D 'Transform.forward' moves object in camera direction so it seems like it's not moving. In Update() code try to use

 bullet.transform.position = bullet.transform.position +
     bullet.transform.up * 1f * Time.deltaTime;

or

 bullet.transform.position = bullet.transform.position +
     bullet.transform.right * 1f * Time.deltaTime;


You can change '1f' multiplier to any value to get moving speed you want.

avatar image Cuki · Jul 03, 2018 at 08:41 PM 0
Share

It works now, thanks a lot, however I changed spawning with a rotation a bit, yours was correct, but I did it with no gun this time, I used parent ins$$anonymous$$d, last time it was really a prototype with weird dimension sprites so maybe that's why it didn't work correctly but now I changed them. This is the final code: public Rigidbody2D bullet; public float time; public float speed;

     void Start()
     {
         Invoke("Spawn", time);
     }
 
     void Update()
     {
         bullet.transform.position += bullet.transform.up * speed * Time.deltaTime;
     }
     
     void Spawn()
     {
         bullet = Instantiate(bullet, transform.position, transform.parent.rotation);
         Invoke("DestroyBullet", 3f);
     }
     
     private void DestroyBullet()
     {
         Destroy(this.bullet);
     }

This is only one bullet per script, the prototype was the most important, upgrading the script for multiple bullets should be easier now and since it was just a prototype, I came up with few more ideas about the core mechanics of the game so maybe there even won't be multiple bullets

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

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

Multiple Cars not working 1 Answer

Flip over an object (smooth transition) 3 Answers

Joystick move Left Right and down, plus rotation. 0 Answers

How can I limit the rotational speed of a gameObject tracking my mouse? 1 Answer

Pysics not working as expected 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