How to use the same script on multiple game object

2020-04-21 02:26发布

I have a script CoinFill which makes a radial progress bar.

When the FillAmount = 1 I want to reset that specific Image to zero. I want to be able to use this for multiple GameObjects. The problem is that when the first FillAmount=1, the penny which speed is faster, you can click on the nickle, which may be at 50% fill and then the penny will reset to 0. However if the nickle is at 1 it will not reset itself, only the penny will rest.

Image of what I am trying to do: enter image description here

Code:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class CoinFill : MonoBehaviour {

    public SavingsAccountManager sam;

    public float fillCoinSpeed;
    public Image coinFill;
    public float maxCoinFill = 100f;
    public float minCoinFill = 0f;
    public float currentCoinFill;


    // Use this for initialization
    void Start()
    {
        currentCoinFill = minCoinFill;
    }


    void Update()
    {
        if (currentCoinFill < maxCoinFill)
        {
            currentCoinFill += fillCoinSpeed * Time.deltaTime;
        }

        coinFill.fillAmount = currentCoinFill / maxCoinFill;
    }
 //Penny Button
    public void PennyPush()
    {
        if (coinFill.fillAmount == 1)
        {
           sam.savingsAccountAmount += .01f;
           sam.savingsAccountText.text = sam.savingsAccountAmount.ToString("f2");
           currentCoinFill = minCoinFill;
        }

    }

 //Nickle Button
    public void NicklePush()
    {
        if (coinFill.fillAmount == 1)
        {
            sam.savingsAccountAmount += .05f;
            sam.savingsAccountText.text = sam.savingsAccountAmount.ToString("f2");
            currentCoinFill = minCoinFill;
        }
    }
}

I am not sure if I need to do something with a parent of the Penny or Nickle or if I should be using a this or set up some parent thing

标签: unity3d
2条回答
再贱就再见
2楼-- · 2020-04-21 02:47

Say you have THREE different pennies, A B and C

1) so indeed create the THREE pennies in the scene .. ie, make three new game objects and add the graphics or whatever. be sure to set the name properly on each game object

2) look at A. drag your script ON TO A.

3) look at the inspector variable slots ON THE SCRIPT actually ON A.

4) drag A from the hierarchy ON TO THOSE INSPECTOR VARIABLE SLOTS, on A

ie, it's totally ok to drag an item "on to itself". in other words your variables in the script will refer simply to "that item itself, A"

5) now forget A. look only at B

6) drag the script on to B. again, drag B "on to itself" to fill the slots

7) now C. drag the script on to C. again, drag C "on to itself" to fill the slots

at the top of the script (in Awake) or whatever add this

Debug.Log("THIS particular script is on " +gameObject.name);

Run. notice you see three of those.

You now have three INDEPENDENT objects with INDEPENDENT scripts! Enjoy

查看更多
男人必须洒脱
3楼-- · 2020-04-21 02:56

Joe's answer is good, but wanted to add another option to answer the titular question: Since your class derives from Monobehavior, you can add your script to ANY game object at Run-time with the following code-line.

someobject.gameObject.AddComponent<CoinFill>();
查看更多
登录 后发表回答