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 KreeperGaming · Jun 21, 2017 at 02:27 PM · fpsgunweaponswayaimdownsights

Aim Down Sights and Weapon Sway not working unless animations are not assigned

Hi,

Aim down sights and weapon sway won't work unless in the animator the actual animations aren't assigned. (Except Idle, Idle works fine.) alt text

This is currently my setup under the animator tab, script will explain why I do not have a transition from Idle to Reload.

alt text

And finally, here are my scripts:

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.UI;
 
 public class Weapon : MonoBehaviour {
 
     private Animator anim; //Animator component
 
     public Image Crosshair;
 
     public AudioSource _AudioSource; //Audio Source
 
     public float range = 100f; // Range of weapons
     public int bulletsPerMag = 30; // Bullets per Mag
     public int bulletsLeft = 200; // Total bullets
 
     public int currentBullets; // Current bullets in current mag
 
     public enum ShootMode {Auto, Semi};
     public ShootMode shootingMode;
 
     public Transform shootPoint; //point where bullet spawns
     public GameObject hitParticles;
     public GameObject bulletImpact;
 
     public ParticleSystem muzzleFlash; // Magic Flashy stuff
 
     public AudioClip shootSound; //shoot sound
 
     public float fireRate = 0.1f; //rate of fire
     public float damage = 20f;
 
     float fireTimer;
 
     private bool isReloading;
     private bool shootInput;
 
     // Use this for initialization
     void Start () 
     {
         currentBullets = bulletsPerMag; // set current bullets to bullets per Mag
         anim = GetComponent<Animator> (); //Get Animator component.
         //_AudioSource = GetComponent<AudioSource> ();
     }
 
     // Update is called once per frame
     void Update () {
         
         switch(shootingMode)
         {
             case ShootMode.Auto:
                 shootInput = Input.GetButton("Fire1");
             break;
 
             case ShootMode.Semi:
                 shootInput = Input.GetButtonDown("Fire1");
             break;
         }
 
         if (shootInput) 
         {
             if (currentBullets > 0)
                 Fire (); //Play fire function
             else if(bulletsLeft > 0)
                 DoReload ();
         } 
         if (Input.GetKeyDown (KeyCode.R)) 
         {
             if (currentBullets < bulletsPerMag && bulletsLeft > 0) 
             {
                 DoReload ();
             }
         }
 
         if (fireTimer < fireRate)
             fireTimer += Time.deltaTime;
     }
 
     void FixedUpdate()
     {
         AnimatorStateInfo info = anim.GetCurrentAnimatorStateInfo (0);
 
 
         isReloading = info.IsName ("reload");
         /*if (info.IsName ("Shoot")) 
         {
             anim.SetBool ("Fire", false);
         }*/
     }
 
     private void Fire()
     {
 
         if (fireTimer < fireRate || currentBullets <= 0 || isReloading) 
                 return;
 
 
         RaycastHit hit;
 
         if (Physics.Raycast (shootPoint.position, shootPoint.transform.forward, out hit, range)) 
         {
             Debug.Log (hit.transform.name + " found");
 
             GameObject hitParticleEffect = Instantiate(hitParticles, hit.point, Quaternion.FromToRotation(Vector3.up, hit.normal));
             //hitParticleEffect.transform.SetParent(hit.transform);
             GameObject bulletHole = Instantiate(bulletImpact, hit.point, Quaternion.FromToRotation(Vector3.forward, hit.normal));
             bulletHole.transform.SetParent(hit.transform);
 
             Destroy(hitParticleEffect, 1f);
             Destroy(bulletHole, 20f);
 
             if(hit.transform.GetComponent<HealthController>())
             {
                 hit.transform.GetComponent<HealthController>().ApplyDamage(damage);
             }
         }
 
         anim.CrossFadeInFixedTime ("Shoot", 0.01f);
         muzzleFlash.Play (); // show muzzle flash
 
         //anim.SetBool ("Fire", true);
         currentBullets--; // deduct bullet
         fireTimer = 0.0f;
         PlayShootSound (); // play shoot sound
     }
 
 
     public void Reload()
     {
         //If bullet left is less than or equal to zero, then YOU SHALL NOT PASS!
         if (bulletsLeft <= 0)
             return;
 
         int bulletsToLoad = bulletsPerMag - currentBullets; // Bullets to load in new mag
         //                                    IF                 Then            Else
         int bulletsToDeduct = (bulletsLeft >= bulletsToLoad) ? bulletsToLoad : bulletsLeft;
 
         bulletsLeft -= bulletsToDeduct;
         currentBullets += bulletsToDeduct;
     }
 
     private void DoReload()
     {
         AnimatorStateInfo info = anim.GetCurrentAnimatorStateInfo (0);
 
         if (isReloading) // if its already playing reload, then GET OUTTA HERE!
             return;
         
         anim.CrossFadeInFixedTime ("reload", 0.01f);
     }
 
     private void PlayShootSound()
     {
         //_AudioSource.clip = shootSound;
         _AudioSource.PlayOneShot(shootSound); // play shoot sound
     }
 }


END OF SCRIPT

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityStandardAssets.Characters.FirstPerson;
 
 
 public class AimDownSights : MonoBehaviour {
 
     public float defaultFOV = 60.0F;
     public float aimedFOV = 45.0F;
     public float smoothFOV = 10.0F;
 
     public FirstPersonController controller;
 
     public Vector3 hipPosition;
     public Vector3 aimPosition;
     public float smoothAim = 12.5F;
 
     void Update()
     {
         if (Input.GetMouseButton(1))
         {
             transform.localPosition = Vector3.Lerp(transform.localPosition, aimPosition, Time.deltaTime * smoothAim);
             Camera.main.fieldOfView = Mathf.Lerp(Camera.main.fieldOfView, aimedFOV, Time.deltaTime * smoothFOV);
             controller.m_WalkSpeed = (3);
             controller.m_RunSpeed = (3);
             
         }
         else
         {
             transform.localPosition = Vector3.Lerp(transform.localPosition, hipPosition, Time.deltaTime * smoothAim);
             Camera.main.fieldOfView = Mathf.Lerp(Camera.main.fieldOfView, defaultFOV, Time.deltaTime * smoothFOV);
             controller.m_WalkSpeed = (5);
             controller.m_RunSpeed = (10);
         }
     }
 }
 

END OF SCRIPT

 #region NAMESPACES
 
 using UnityEngine;
 using System.Collections;
 
 #endregion
 
 #region WeaponSway Class
 
 public class WeaponSway : MonoBehaviour
 {
 
     // PRIVATE BUT EDITABLE IN THE INSPECTOR
     // IF YOU WANT TO EDIT THESE EXTERNALLY THE USE PROPERTY ACCESSOR
     [SerializeField]
     [Range(0.1f, 5f)]
     [Tooltip("Tilt angle smoothing")]
     private float _smoothGun = 2f;
 
     [SerializeField]
     [Range(0.1f, 90f)]
     [Tooltip("Strafing tilt angle")]
     private float _tiltAngle = 4.25f;
 
     [SerializeField]
     [Range(0.01f, 0.1f)]
     [Tooltip("Minimum amount of movement")]
     private float _amount = 0.025f;
 
     [SerializeField]
     [Range(0.01f, 0.1f)]
     [Tooltip("Minimum amount of movement")]
     private float _maxAmount = 0.075f;
 
     [SerializeField]
     [Range(0.1f, 5f)]
     [Tooltip("Directional sway smoothing")]
     private float _smooth = 2.75f;
 
     [SerializeField]
     [Range(0.1f, 5f)]
     [Tooltip("Rotational sway smoothing")]
     private float _smoothRotation = 1.5f;
 
     // EXAMPLE PROPERTY ACCESSOR
 
     public float tiltAngle
     {
         get // USE THIS TO READ THE VALUE - CAN BE REMOVED
         {
             return _tiltAngle;
         }
         set // USE THIS TO ASSIGN A VALUE - CAN BE REMOVED TO
             // MAKE READ ONLY WITH GET STILL ABOVE
         {
             _tiltAngle = value;
         }
     }
 
     // PRIVATE SCRIPT ONLY VARIABLES
     private float _factorX;
     private float _factorY;
     private float _tiltGun;
     private float _tiltZ;
     private float _tiltX;
     private Quaternion _target;
     private Quaternion _target2;
     private Vector3 _finalPos;
     private Vector3 _startingPos;
 
     void Start()
     {
         // ON START WE NEED TO STORE OUR CURRENT LOCAL POSITION
         _startingPos = transform.localPosition;
     }
 
     void Update()
     {
         // DONT NEED TO RETRIVE THIS VALUE UNLESS WE ARE MOVING IN THAT DIRECTION
         if (Input.GetAxisRaw("Horizontal") > 0 || Input.GetAxisRaw("Horizontal") < 0)
         {
             // GET OUR INPUT VALUE AND STORE IT
             _tiltGun = Input.GetAxisRaw("Horizontal") * _tiltAngle;
 
             // SAVE IT AS A ROTATIONAL VALUE
             _target2 = Quaternion.Euler(0, 0, _tiltGun);
 
             // THEN APPLY IT USING SLERP, LOWER THE SMOOTHING THE FASTER THE TRANSISTION WILL BE
             transform.localRotation
                 = Quaternion.Slerp(transform.localRotation,     // STARTING ROTATION
                 _target2,                                       // TARGET ROTATION
                 Time.deltaTime * _smoothGun);                   // TIME TO GET THERE
         }
 
         // GET OUR AXIS FOR POSITION
         _factorX = -Input.GetAxisRaw("Mouse X") * _amount;
         _factorY = -Input.GetAxisRaw("Mouse Y") * _amount;
         
         // GET OUR AXIS AGAIN FOR ROTATION
         _tiltZ = Input.GetAxis("Mouse X") * _tiltAngle;
         _tiltX = Input.GetAxis("Mouse Y") * _tiltAngle;
 
         // CLAMP THEM BY A CERTIAN RANGE TO PREVENT GLITCHING - BOTH AXIS
         Clamp(_factorX, -_maxAmount, _maxAmount);
         Clamp(_factorY, -_maxAmount, _maxAmount);
 
         // TO GET OUR FINAL SWAY POSITION LERP BETWEEN OUR STARTING AND THE AMOUNT OF NEW MOVEMENT WE DID
         _finalPos
             = new Vector3(_startingPos.x + _factorX,        // ADD OUT X MOVEMENT TO OUR X AXIS
             _startingPos.y + _factorY,                      // ADD OUR Y MOVEMENT TO OUR Y AXIS
             _startingPos.z);                                // THIS IS 0 UNLESS ITS MODIFIED ELSEWHERE
 
         // LERP BETWEEN STARTING POSITION AND FINAL POSITION BY OUR SMOOTHING OVER TIME
         transform.localPosition
             = Vector3.Lerp(transform.localPosition,         // WHERE WE STARTED
             _finalPos,                                      // WHERE WE WANT TO GO
             Time.deltaTime * _smooth);                      // BY HOW FAST
 
         // STORE OUR TARGET IN A VARIABLE
         _target
             = Quaternion.Euler(_tiltX,                      // AMOUNT OF X ROTATION
             0,                                              // AMOUNT OF Y ROTATION
             _tiltZ);                                        // AMOUNT OF Z ROTATION
 
         // THEN FINALLY APPLY OUR ROTATION
         transform.localRotation
             = Quaternion.Slerp(transform.localRotation,     // STARTING ROATAION
             _target,                                        // WHERE WE WANT TO GO
             Time.deltaTime * _smoothRotation);              // HOW LONG TO GET THERE
     }
 
     /// <summary>
     /// STATIC METHOD CAN BE CALLED FROM ANYWHERE OUTSIDE THIS SCRIPT BY USING
     /// WeaponSway.Clamp(amount, min, max);
     /// </summary>
     /// <param name="amount">Value you want to restrct</param>
     /// <param name="min">Minimum value</param>
     /// <param name="max">Maximum Value</param>
     /// <returns></returns>
     public static float Clamp(float amount, float min, float max)
     {
         // BIND INPUT AMOUNT TO RANGE BETWEEN MIN AND MAX
         return Mathf.Clamp(amount, min, max);
     }
 
 }
 
 #endregion

capture.png (13.5 kB)
capture.png (31.2 kB)
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

0 Replies

· Add your reply
  • Sort: 

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

85 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

Related Questions

Whats wrong with my Aim Down Sights script??? 1 Answer

Gun sway script not working 2 Answers

Select Object ( Weapon ) Quick! Help! xD 1 Answer

FPS animations for different purposes? 1 Answer

Handgun animation to play once when gun is shot in-game 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