Search Unity

  1. Megacity Metro Demo now available. Download now.
    Dismiss Notice
  2. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

2 handed pistols firing issue

Discussion in 'Scripting' started by Mister-D, Oct 21, 2014.

  1. Mister-D

    Mister-D

    Joined:
    Dec 6, 2011
    Posts:
    1,694
    i have this script for a 2 handed pistol model, the problem is that each gun stops firing when one of them gets into reload state, i cant see why this happens
    heres the code


    Code (JavaScript):
    1. var normalpositionleft : Vector3;
    2. var aimpositionleft : Vector3;  
    3. var normalpositionright : Vector3;
    4. var aimpositionright : Vector3;
    5. var aimFOV : float = 45;
    6. var normalFOV : float = 65;
    7. var speed: float;
    8. var damping : float;
    9. var player : Transform;
    10.  
    11. var AudioSourceleft : AudioSource;
    12. var AudioSourceright : AudioSource;
    13. var fireAudioSourceleft : AudioSource;
    14. var fireAudioSourceright : AudioSource;
    15. var emptySound : AudioClip;
    16. var fireSound : AudioClip;
    17. var armleft : Transform;
    18. var armright : Transform;
    19. var reloadSoundleft : AudioClip;
    20. var reloadSoundright : AudioClip;
    21.  
    22. var ammoToReload : float = 12;
    23.  
    24.  
    25. var impactprefab : Transform;
    26.  
    27. var projectilecount : int = 1;
    28. var inaccuracy : float = 0.1;
    29. var force : float = 500;
    30. var damage : float = 50;
    31. var range : float = 100;
    32.  
    33. var  mask : LayerMask;
    34. var fireAnimleft : AnimationClip;
    35. var fireAnimright : AnimationClip;
    36. var fireAnimSpeed : float = 1.5;
    37. var reloadAnimright : AnimationClip;
    38. var reloadAnimleft : AnimationClip;
    39.  
    40. var shell : Transform;  
    41. var shellPosright : Transform;
    42. var shellPosleft : Transform;
    43. var shellejectdelay : float = 0;
    44. var ammo : float = 200;
    45. var currentammoright: float = 12;
    46. var currentammoleft: float = 12;
    47. var muzzle : Transform;
    48. var muzzlePosright : Transform;
    49. var muzzlePosleft : Transform;
    50. var retractPos : Vector3;
    51.  
    52. private var isfiring : boolean = false;
    53. private var didfireleft : boolean = false;
    54. private var nextField : float;
    55. private var isaiming : boolean = false;
    56. private var isreloadingleft : boolean;
    57. private var isreloadingright : boolean;
    58. private var canaim : boolean = true;
    59. private var retract : boolean = false;  
    60. private var canfire : boolean = true;
    61. private var canreload : boolean = true;
    62. private var canrun : boolean = true;
    63.  
    64. function Start()
    65. {
    66.     retract = false;
    67.     Screen.lockCursor = true;
    68.    
    69.     onstart();
    70. }
    71. function Update ()
    72. {
    73.    
    74.    
    75.     var step = speed * Time.deltaTime;
    76.    
    77.     var newField = Mathf.SmoothDamp(Camera.main.fieldOfView, nextField, damping, .3);
    78.     Camera.main.fieldOfView = newField;
    79.     if (retract)
    80.     {
    81.         canfire = false;
    82.         isaiming = false;
    83.         armright.transform.localPosition = Vector3.MoveTowards(armright.transform.localPosition, retractPos, 5 * Time.deltaTime);
    84.         armleft.transform.localPosition = Vector3.MoveTowards(armleft.transform.localPosition, retractPos, 5 * Time.deltaTime);
    85.         nextField = normalFOV;
    86.     }
    87.     else
    88.     {
    89.         canfire = true;
    90.     }
    91.    
    92.     if (Input.GetMouseButton(1) && canaim)
    93.     {
    94.        
    95.         isaiming = true;
    96.         armright.transform.localPosition = Vector3.MoveTowards(armright.transform.localPosition, aimpositionright, step);
    97.         armleft.transform.localPosition = Vector3.MoveTowards(armleft.transform.localPosition, aimpositionleft, step);
    98.         nextField = aimFOV;
    99.         canrun = false;
    100.     }
    101.     else
    102.     {
    103.         isaiming = false;
    104.         armright.transform.localPosition = Vector3.MoveTowards(armright.transform.localPosition, normalpositionright, step);
    105.         armleft.transform.localPosition = Vector3.MoveTowards(armleft.transform.localPosition, normalpositionleft, step);
    106.         nextField = normalFOV;
    107.         canrun = true;
    108.     }
    109.     if ((currentammoleft ==0 || currentammoright == 0) && ammo == 0)
    110.     {
    111.         canfire = false;
    112.         canreload = false;
    113.         if (Input.GetMouseButtonDown(0) )
    114.         {
    115.             AudioSourceleft.PlayOneShot(emptySound);
    116.         }
    117.        
    118.     }
    119.     else
    120.     {
    121.         canreload = true;
    122.        
    123.     }
    124.     if (Input.GetMouseButton(0) && canfire)
    125.     {
    126.         if (didfireleft)
    127.         {
    128.             fireright();
    129.         }
    130.         else
    131.         {
    132.        
    133.             fireleft();
    134.         }
    135.        
    136.     }
    137.    
    138.  
    139. }
    140.  
    141.  
    142.  
    143. function onstart()
    144. {
    145.     AudioSourceleft.Stop();
    146.     AudioSourceright.Stop();
    147.    
    148.    
    149.    
    150. }
    151. function fireleft()
    152. {
    153.    
    154.     if (currentammoleft <= 0 )
    155.     {
    156.        
    157.         reloadleft();
    158.     }
    159.    
    160.    
    161.    
    162.     if (armleft.animation[fireAnimleft.name].enabled == false && !isreloadingleft)
    163.     {
    164.        
    165.        
    166.        
    167.         var muzzleInstance2 = Instantiate(muzzle, muzzlePosleft.transform.position,muzzlePosleft.transform.rotation);
    168.         muzzleInstance2.parent = transform;
    169.        
    170.         ejectshellleft();
    171.        
    172.        
    173.         fire(1);
    174.        
    175.         fireAudioSourceleft.PlayOneShot(fireSound, 1);
    176.         armleft.animation[fireAnimleft.name].speed = fireAnimSpeed;    
    177.         armleft.animation.Play(fireAnimleft.name);
    178.         currentammoleft -=1;
    179.        
    180.        
    181.        
    182.         yield WaitForSeconds (armleft.animation[fireAnimleft.name].length * 1);
    183.         didfireleft = true;
    184.        
    185.        
    186.     }
    187.    
    188.    
    189. }
    190. function fireright()
    191. {
    192.     if (currentammoright <= 0 )
    193.     {
    194.        
    195.         reloadright();
    196.     }
    197.  
    198.    
    199.    
    200.    
    201.     if (armright.animation[fireAnimright.name].enabled == false && !isreloadingright)
    202.     {
    203.         var muzzleInstance1 = Instantiate(muzzle, muzzlePosright.transform.position,muzzlePosright.transform.rotation);
    204.         muzzleInstance1.parent = transform;
    205.        
    206.         ejectshellright();
    207.            
    208.         fire(1);
    209.        
    210.         fireAudioSourceright.PlayOneShot(fireSound, 1);
    211.         armright.animation[fireAnimright.name].speed = fireAnimSpeed;    
    212.         armright.animation.Play(fireAnimright.name);
    213.         currentammoright -=1;
    214.        
    215.        
    216.         yield WaitForSeconds (armright.animation[fireAnimright.name].length * 1);
    217.         didfireleft = false;
    218.                
    219.     }
    220.            
    221. }  
    222.  
    223. function reloadleft()
    224. {
    225.    
    226.     if (armleft.animation[reloadAnimleft.name].enabled == false && canreload)
    227.     {
    228.            
    229.         isreloadingleft = true;      
    230.         armleft.animation.Play(reloadAnimleft.name);
    231.         AudioSourceleft.clip = reloadSoundleft;
    232.         AudioSourceleft.loop = false;
    233.         AudioSourceleft.volume = 1;
    234.         AudioSourceleft.Play();
    235.         canaim = false;
    236.         yield WaitForSeconds(armleft.animation[reloadAnimleft.name].length * 0.3);
    237.         ammoToReload = Mathf.Clamp(ammoToReload, ammoToReload, ammo);
    238.        
    239.         ammo -= ammoToReload;
    240.         currentammoleft += ammoToReload;
    241.        
    242.        
    243.         yield WaitForSeconds(armleft.animation[reloadAnimleft.name].length * 0.7);
    244.         isreloadingleft = false;
    245.         canaim = true;
    246.        
    247.        
    248.     }
    249.    
    250. }
    251. function reloadright()
    252. {
    253.    
    254.     if (armright.animation[reloadAnimright.name].enabled == false && canreload)
    255.     {
    256.        
    257.                
    258.         isreloadingright = true;
    259.         armright.animation.Play(reloadAnimright.name);
    260.         AudioSourceright.clip = reloadSoundright;
    261.         AudioSourceright.loop = false;
    262.         AudioSourceright.volume = 1;
    263.         AudioSourceright.Play();
    264.         canaim = false;
    265.         yield WaitForSeconds(armright.animation[reloadAnimright.name].length * 0.3);
    266.         ammoToReload = Mathf.Clamp(ammoToReload, ammoToReload, ammo);
    267.        
    268.         ammo -= ammoToReload;
    269.         currentammoright += ammoToReload;
    270.                
    271.         yield WaitForSeconds(armright.animation[reloadAnimright.name].length * 0.7);
    272.                
    273.         isreloadingright = false;
    274.            
    275.         canaim = true;
    276.            
    277.        
    278.     }
    279. }
    280.    
    281.  
    282. function doRetract()
    283. {
    284.    
    285.     retract = true;
    286. }
    287. function doNormal()
    288. {
    289.     onstart();
    290.     retract = false;
    291. }
    292. function ejectshellleft()
    293. {
    294.     yield WaitForSeconds(shellejectdelay);
    295.     var shellInstance = Instantiate(shell, shellPosleft.transform.position,shellPosleft.transform.rotation);
    296.     shellInstance.rigidbody.AddRelativeForce(80,80,0);
    297.     shellInstance.rigidbody.AddRelativeTorque(10,10,0);
    298.    
    299. }
    300. function ejectshellright()
    301. {
    302.     yield WaitForSeconds(shellejectdelay);
    303.     var shellInstance = Instantiate(shell, shellPosright.transform.position,shellPosright.transform.rotation);
    304.     shellInstance.rigidbody.AddRelativeForce(80,80,0);
    305.     shellInstance.rigidbody.AddRelativeTorque(10,10,0);
    306.    
    307. }
    308. function fire (i : int)
    309. {
    310.     var rand : Vector2 = Random.insideUnitCircle;
    311.     var fwrd = Camera.main.transform.forward;
    312.  
    313.    
    314.    
    315.     var camUp = Camera.main.transform.up;
    316.     var camRight = Camera.main.transform.right;
    317.     var wantedvector = fwrd;
    318.     wantedvector += Random.Range( -inaccuracy, inaccuracy ) * camUp + Random.Range( -inaccuracy, inaccuracy ) * camRight;
    319.     var ray = new Ray (transform.position, wantedvector);
    320.     var hit : RaycastHit = new RaycastHit();
    321.    
    322.     if (Physics.Raycast(ray,hit, range,mask))
    323.           {  
    324.              
    325.               if(hit.rigidbody) hit.rigidbody.AddForceAtPosition (force * fwrd , hit.point);
    326.               hit.transform.SendMessageUpwards ("Damage",damage, SendMessageOptions.DontRequireReceiver);
    327.               var decal = Instantiate(impactprefab, hit.point, Quaternion.FromToRotation(Vector3.up, hit.normal));
    328.               decal.parent = hit.transform;
    329.           }
    330. }
     
  2. Mister-D

    Mister-D

    Joined:
    Dec 6, 2011
    Posts:
    1,694
  3. novashot

    novashot

    Joined:
    Dec 12, 2009
    Posts:
    373
    Code (CSharp):
    1.  if (Input.GetMouseButton(0) && canfire)
    2.     {
    3.         if (didfireleft)
    4.         {
    5.             fireright();
    6.         }
    7.         else
    8.         {
    9.      
    10.             fireleft();
    11.         }
    12.      
    13.     }
    you depend the firing of each gun on eachother... if one can't fire... neither can the other (didfireLeft)

    Perhaps for the duration of the gun reload set the bool to only fire the other weapon...