This question was
closed Oct 06, 2021 at 11:39 PM by
Gmr_Phorlyfe for the following reason:
The question is answered, right answer was accepted
Question by
Gmr_Phorlyfe · Jul 26, 2021 at 03:53 AM ·
instantiateinputarraymouse
Need Help instantiating GameObjects in an array using the middle mouse wheel. whew.
public class WeaponSwitch : MonoBehaviour
{
public int currentWeapon = 3;
public GameObject[] blockPrefabs;
public GameObject current;
// public GameObject[] blocks;
// Start is called before the first frame update
void Start()
{
blockPrefabs = new GameObject[currentWeapon];
}
// Update is called once per frame
void Update()
{
// checks for equipment
if (Input.GetAxis("Mouse ScrollWheel") > 0f) {
SelectWeapon();
Debug.Log("wheel works");
}
if (Input.GetAxis("Mouse ScrollWheel") < 0f) {
SelectWeapon();
}
}
public void SelectWeapon (){
//makes sure they match length
for (int i = 0; i < currentWeapon; i++)
{
Debug.Log(gameObject.name);
GameObject go = Instantiate(blockPrefabs[i]) as GameObject;
go.transform.localScale = Vector3.one;
blockPrefabs[i] = go;
}
}
}
basically, I want to have 3 prefabs that are weapons and be able to cycle through them using the middle mouse button.
hitting a wall on what I am doing wrong.
any help is appreciated.
thank you for your time.
Comment
Best Answer
Answer by Hellium · Jul 26, 2021 at 09:02 AM
public class WeaponSwitch : MonoBehaviour
{
public GameObject[] weaponPrefabs; // Drag & drop the prefabs in the inspector
private GameObject[] weapons;
private int currentWeapon = 0;
private void Start()
{
weapons = new GameObject[weaponPrefabs.Length];
for (int i = 0; i < weaponPrefabs.Length; i++)
{
weapons[i] = Instantiate(weaponPrefabs[i]);
weapons[i].SetActive(i == currentWeapon);
weapons[i].transform.localScale = Vector3.one;
}
}
private void Update()
{
float scroll = Input.GetAxis("Mouse ScrollWheel");
if (scroll > Mathf.Epsilon) {
SelectNextWeapon();
}
else if (scroll < -Mathf.Epsilon) {
SelectPreviousWeapon();
}
}
private void SelectNextWeapon ()
{
weapons[currentWeapon].SetActive(false);
currentWeapon = (currentWeapon + 1) % weapons.Length;
weapons[currentWeapon].SetActive(true);
}
private void SelectPreviousWeapon ()
{
weapons[currentWeapon].SetActive(false);
currentWeapon = (currentWeapon + weapons.Length - 1) % weapons.Length;
weapons[currentWeapon].SetActive(true);
}
}
Follow this Question
Related Questions
How do I use Input.GetButton, instead of OnMouse() 1 Answer
How to create an array of clones for a seperate Save/Load script 0 Answers
How to get mouse click world position in the scene view in editor script? 3 Answers
Mouse sometimes gets stuck in center of canvas menu screen with new Input System, 1 Answer
Invert UI scrolling 1 Answer