Hi guys.
I’m trying to code a simple weapon selector for my game: basically i’d like the main weapon to change frame when the user uses the scroll wheel of the mouse. I setup an animation with 2 keyframes called “WeaponAnimation” for my main weapon, and tried to use the AnimationState.time to change the frame of the animation: the fist keyframe is at 0s and the second one is at 1s, so i wrote:
public Animation anim;
//other code here
anim["WeaponAnimation"].time = 1f;
But when I ran the game i got an error that was telling me that there was a problem with line 34, where i wrote the script to change the time of the animation… here’s the error:
here’s my full script:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ProprietàArmi : MonoBehaviour
{
private int Pistol = 0;
private int AssaultRifle = 1;
public static int Weapon;
public static float TimeBetweenShots;
public static float MagazineSize;
public static float Damage;
public GameObject MainWeapon;
public Animator Animator;
public Animation anim;
public float[] Properties = { 0.1f, 7, 10 , 0.03f , 30 , 10}; // Time between shots, magazine size, damage
private void Start()
{
Weapon = Pistol; // set weapon on start
UpdateWeapon(Weapon); // get properties of weapon
//Animator = MainWeapon.GetComponent<Animator>();
Animator.speed = 0f;
//Animation = MainWeapon.GetComponent<Animation>();
}
private void UpdateWeapon(int WeaponNew)
{
Weapon = WeaponNew; // update weapon
TimeBetweenShots = Properties[Weapon*3];
MagazineSize = Properties[Weapon*3 + 1];
Damage = Properties[Weapon*3 + 2];
anim["WeaponAnimation"].time = 1f;
}
void Update()
{
if (Input.GetAxis("Mouse ScrollWheel") > 0f)
{
if (Weapon == Properties.Length/3)
{
Weapon = 0;
} else
{
Weapon += 1;
}
UpdateWeapon(Weapon);
} else if (Input.GetAxis("Mouse ScrollWheel") < 0f)
{
if (Weapon == 0)
{
Weapon = Properties.Length/3;
}
else
{
Weapon -= 1;
}
UpdateWeapon(Weapon);
}
}
}
Other informations:
- the main weapon has both the animator
and the animation component; - I left the animator unchanged except
for the speed, which i set to 0; - Both the public animator and
animation have their references in
the inspector; - I’m using Unity 2020.1.0f1
I’m a complete beginner to Unity and C#, and this is my first time dealing with animations: thanks in advance for the answers, have a good day.
[EDIT]
I actually solved the problem in another way, without animations:
I created an array of sprites where each element is a specific weapon, then i used the sprite renderer component of the main weapon to change it from the array.
public Sprite[] WeaponList; //insert the sprites in the editor
private void UpdateWeapon() {
// other code here...
MainWeapon.GetComponent<SpriteRenderer>().sprite = Armi[Weapon];
}
Hope it can help people with my same issue