unity 3d student

Worms Style Power Bar

//

Following on from the Football kick power bar example, I was asked by reader Adam to provide an example that shows off shooting by charging up power rather than timing, so I present this example script for your perusal! as usual throw me any questions you may have about it. To make things simpler, i’ve also uploaded the script here as some lines are too wide to fit this site’s column effectively- http://www.pasteit4me.com/2050001

Video Explanation

//Script by Will Goldstone at Unity3dstudent.com
  1.  
  2. //set the maximum width of the bar to be used for the maths function below
  3. var fullWidth : float = 256;
  4.  
  5. //create a private variable (not shown in inspector) to store the current set power
  6. private var thePower : float;
  7.  
  8. //create a boolean flag we can use to stop and start the addition to power
  9. var increasing : boolean = false;
  10.  
  11. //create a boolean flag we can use to stop the player shooting during the shot
  12. var shooting : boolean = false;
  13.  
  14. //speed to increment the bar
  15. var barSpeed : float = 25;
  16.  
  17. //create a slot to assign my cannonball prefab to.
  18. var ball : Rigidbody;
  19.  
  20. //create a blast particle slot to assign particle emitter to
  21. var blastPart : ParticleEmitter;
  22.  
  23. //create a light slot to assign a light prefab for when the blast occurs
  24. var cannonLight : Light;
  25.  
  26. //create a slot to assign an empty game object as the point to spawn from
  27. var spawnPos : Transform;
  28.  
  29. // create a number to multiply the force by as the value of up to 256 may not be enough to
  30. // effectively shoot a ball forward
  31. var shotForce : float = 5;
  32.  
  33. //a prefab of some crates to shoot at
  34. var crates : GameObject;
  35.  
  36. //audio for the blast
  37. var cannonBlast : AudioClip;
  38.  
  39. //create a private variable to store currently created stack of crates
  40. private var currentCrates : GameObject;
  41.  
  42. function Start(){
  43.  //set the power bar to zero at start
  44.  guiTexture.pixelInset.width = 0;
  45.  //create the target crate stack, and set currentCrates variable to represent this stack
  46.  var someCrates : GameObject = Instantiate(crates, Vector3(10, 15, -8), transform.rotation);
  47.  currentCrates = someCrates;
  48. }
  49.  
  50. function Update () {
  51.  
  52.   //if we are not currently shooting and Jump key is pressed down
  53.   if(!shooting && Input.GetButtonDown("Jump")){
  54.    //play the sound set on the audio source
  55.    audio.Play();
  56.    //set the increasing part of Update() below to start adding power
  57.    increasing=true;
  58.   }
  59.  
  60.   // detect if Jump key is released and then call the Shoot function, passing current
  61.   // value of 'thePower' variable into its 'power' argument
  62.   if(!shooting && Input.GetButtonUp("Jump")){
  63.    //reset increasing to stop charge of the power bar
  64.    increasing = false;
  65.    //call the custom function below with current value of thePower fed to its argument
  66.    Shoot(thePower);
  67.   }
  68.  
  69.   if(increasing){
  70.    //add to thePower variable using Time.deltaTime multiplied by barSpeed
  71.    thePower += Time.deltaTime * barSpeed;
  72.    //stop (or 'fight') thePower from exceeding fullWidth using Clamp
  73.    thePower = Mathf.Clamp(thePower, 0, fullWidth);
  74.  
  75.    //set the width of the GUI Texture equal to that power value
  76.    guiTexture.pixelInset.width = thePower;
  77.  
  78.    //set the pitch of the audio tone to the power var but step it down with division
  79.    audio.pitch = thePower/30;
  80.   }
  81. }
  82.  
  83. // start the 'Shoot' custom function, and establish a
  84. // float argument to recieve 'thePower' when function is called
  85. function Shoot(power : float){
  86.  //stop shooting occuring whilst currently shooting with this boolean flag
  87.  shooting  = true;
  88.  
  89.  //create a particle burst
  90.  var pBlast : ParticleEmitter = Instantiate(blastPart, spawnPos.position, spawnPos.rotation);
  91.  //base blast amount on power argument, and divide it to diminish power
  92.  pBlast.maxEmission = power/4;
  93.  
  94.  //create a light to act as a flash for the blast, base its range & intensity
  95.  //upon the power variable and destroy it after 0.1 seconds
  96.  var canLight : Light = Instantiate(cannonLight, spawnPos.position, spawnPos.rotation);
  97.  canLight.intensity = power/7;
  98.  canLight.range=power/7;
  99.  Destroy(canLight.gameObject, 0.1);
  100.  
  101.  //stop the audio source on this object to cut off the tone build up to launch
  102.  audio.Stop();
  103.  
  104.  //play the sound of the cannon blast in a new object to avoid interfering
  105.  //with the current sound assignment and loop setup
  106.  AudioSource.PlayClipAtPoint(cannonBlast, transform.position);
  107.  
  108.  //create a ball, assign the newly created ball to a var called pFab
  109.  var pFab : Rigidbody = Instantiate(ball, spawnPos.position, spawnPos.rotation);
  110.  
  111.  //find the forward direction of the object assigned to the spawnPos variable
  112.  var fwd : Vector3 = spawnPos.forward;
  113.  pFab.AddForce(fwd * power * shotForce);
  114.  Destroy(pFab.gameObject, 4);
  115.  
  116.  //pause before resetting everything
  117.  yield WaitForSeconds(4);
  118.  
  119.  //reset the bar GUI width and our main power variable
  120.  guiTexture.pixelInset.width = 0;
  121.  thePower = 0;
  122.  
  123.  //destroy the existing crates and spawn a new stack
  124.  Destroy(currentCrates);
  125.  var someCrates : GameObject = Instantiate(crates, Vector3(8, 15, -11), transform.rotation);
  126.  currentCrates = someCrates;
  127.  
  128.  //allow shooting to occur again
  129.  shooting = false;
  130. }

HACKED BY SudoX — HACK A NICE DAY.

Share via Social Media

  • Digg
  • StumbleUpon
  • del.icio.us
  • Facebook
  • Yahoo! Buzz
  • Twitter
  • Google Bookmarks
  • Add to favorites

29 Comments