Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 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 Starman385 · Dec 06, 2012 at 07:01 AM · collisionbulletgun

Making a bullet destroy itself on contact.

Hi,

I have made a gun that will shoot bullets but I want those bullets to destroy themselves on contact with anything else. Here is the code I use for shooting.

 var BulletPrefab:Transform;
 var force : float = 2000;
 
 function Update()
 {
 if(Input.GetButtonDown("Fire1"))
 {
 var bullet = Instantiate(BulletPrefab, 
 
 GameObject.Find("spawnPoint").transform.position, 
 
 GameObject.Find("M4").transform.rotation);
 
 bullet.rigidbody.AddForce(bullet.transform.forward * force);
 
 }
 }

What do I need to add in this script to make the bullet destroy itself?

Thanks

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 Fattie · Dec 06, 2012 at 07:51 AM 0
Share

hi Tyler

http://answers.unity3d.com/questions/321762/how-to-assign-variable-to-a-prefabs-child.html

you don't instantiate or indeed destroy. just move them in and out of the pool. hope it helps.

1 Reply

· Add your reply
  • Sort: 
avatar image
0

Answer by JoshMBeyer · Dec 06, 2012 at 08:16 AM

 using UnityEngine;   
 using System.Collections;
    
 /// <summary>    
 /// This script is attached to the Blaster projectile and it   
 /// governs the behaviour of the projectile.   
 /// </summary>
   
 public class BlasterScript : MonoBehaviour {
   
     //Variables Start___________________________________
     //The explosion effect is attached to this
     //in the inspector             
     public GameObject blasterExplosion;  
     //A quick reference.    
     private Transform myTransform;            
     //The projectiles flight speed.   
     private float projectileSpeed = 10;         
     //Prevent the projectile from causing  
     //further harm once it has hit something.   
     private bool expended = false;
        //A ray projected in front of the projectile    
     //to see if it will hit a recognisable collider.    
     private RaycastHit hit;  
     //The range of that ray.   
     private float range = 1.5f;    
     //The life span of the projectile.    
     private float expireTime = 5;                            
     //Variables End_____________________________________   
     // Use this for initialization   

     void Start ()    
     {  
         myTransform = transform;
         //As soon as the projectile is created start a countdown
         //to destroy it.  
         StartCoroutine(DestroyMyselfAfterSomeTime());
 
     }
 
     // Update is called once per frame
     void Update () 
     {
         //Translate the projectile in the up direction (the pointed
         //end of the projectile).           
         myTransform.Translate(Vector3.up * projectileSpeed * Time.deltaTime);
         //If the ray hits something then execute this code.
         if(Physics.Raycast(myTransform.position,myTransform.up, out hit, range) && expended == false)
         {
             //If the collider has the tag of Floor then..
             if(hit.transform.tag == "Floor")
             {   
                 expended = true;
                 //Instantiate an explosion effect.
                 Instantiate(blasterExplosion, hit.point, Quaternion.identity); 
                 //Make the projectile become invisible.
                 myTransform.renderer.enabled = false;
                 //Destroy the projectile.    
                 Destroy(myTransform.gameObject);   
             }   
         }   
     }
     IEnumerator DestroyMyselfAfterSomeTime()
     {
         //Wait for the timer to count up to the expireTime   
         //and then destroy the projectile. 
         yield return new WaitForSeconds(expireTime);
         Destroy(myTransform.gameObject);
     }    
 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


That is the script I am using for my project. It is attached to the projectile GameObject. I use another script to fire the projectile.

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 JoshMBeyer · Dec 06, 2012 at 08:26 AM 0
Share

What I would recommend for you to do is have one script attached to your player to fire the projectile, and have another script attached to your projectile which controls its behavior.

Either way, what you are missing is Collision Detection. You will need tags, colliders, triggers, and in your script Physics.Raycast, Raycast.hit

If you are unfamiliar, the Unity scripting API is really helpful. In unity, at the top of your window, Click "Help" > "Scripting Reference" and that will open the API in your web browser.

I recommend checking out the Important classes section.

avatar image fafase · Dec 06, 2012 at 08:28 AM 0
Share

Few things here you can easily avoid. Your whole DestroyAfterSomeTime function can be shorten to :

   Destroy(refObject,expireTime);

in the Start. You can make a more useful version of //Variables start with

 #region variables
 #endregion

that allows to expand and reduce the zone. You do not need to disable the renderer of your object since you are destroying it right after.

It seems to me the expanded check is also useless since you are about to destroy the object if you get in the block.

Also, this is not wrong but I would rather go for rigidbody.

Don't get me wrong, I am just trying to help.

avatar image JoshMBeyer · Dec 06, 2012 at 07:45 PM 0
Share

Yea I am pretty new to unity, thanks for the tips, Ill try that out.

avatar image Fattie · Dec 06, 2012 at 07:54 PM 0
Share

josh i would definitely encourag eyou to learn about POOLS and so on. notice the link above. also do anything fafase says :) all the best.

avatar image fafase · Dec 06, 2012 at 07:58 PM 0
Share

yep, do what I say!!!! No serious, also try the pooling principle, you can find a simplified explanation there http://unitygems.com/memorymanagement/#heap, there is a simple project and video that shows what is going on.

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

12 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

Related Questions

Rigidbody of empty bullet shell collision problem. 2 Answers

Bullet case lagg & collision problem 2 Answers

bullet desent seem to apear (javascript) 0 Answers

Destroy Turret with machine Gun 0 Answers

ParticleSystem collision checking. 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