Unity2D:修复我的硬币系统

时间:2017-10-18 12:59:49

标签: unity3d

我的硬币系统的工作方式很简单。

  1. 玩家自动开始使用10个水果
  2. 然后敌人会产生并从玩家身上偷取一堆随机的水果,敌人将偷取的水果数量从随机整数到玩家之前的数量不等。
  3. 玩家可以通过刺杀敌人获得更多水果,玩家获得的水果数量从随机整数到随机整数不等。
  4. 然而,如果敌人从玩家那里取出随机数量的水果,然后玩家再刺伤敌人,那么玩家将获得敌人从他们身上获取的大量果实,以及来自敌人的额外果实奖励(如果需要,请看第3点。
  5. 我的问题:

    这只会偶尔发生,但有时硬币系统会拒绝工作,特别是在比赛开始时或者如果玩家有大量的水果,即300个水果。例如,如果玩家拥有大约300个水果并且敌人从玩家那里获得大约200个水果(意味着玩家将有100个水果重新发送),那么如果玩家刺伤了敌人,玩家将只收到大约(例如)25水果回来而不是最初的200 +奖金(例如)25。如前所述,这只是偶尔发生 - 有时比平常更多,但我仍然希望确保它的工作准确和顺利。我试过调试它,但我仍然坚持为什么它不能正常工作。任何人都可以帮我修改我的代码或给我一个更好的解决方案,我如何能够建立一个更好的硬币系统。谢谢!

    敌人盗窃剧本:

    public static int scoreValue;
    
    void Start () {
        scoreValue = 0;
    }
    
    void Update () {
        Debug.Log ("ScoreValue:  " + scoreValue);
    }
    
    void OnTriggerEnter2D(Collider2D col)
    {
        if (col.tag == "Farm") {
            collidedwithFarm = true;
            scoreValue = Random.Range (1, GameController.Fruit);
            Debug.Log ("Enemy takes:  " + scoreValue);
            GameController.Fruit-= scoreValue;
            //Wallet += scoreValue;
            if (GameController.Fruit<= 0) {
                GameController.Fruit = 0;
            }
        }
    }
    

    敌人的剧本:

    public int randomValue;
    public int wallet;
    
    public bool collidedwithFarm = false;
    
    // Use this for initialization
    void Start () {
        wallet = 0;
        collidedwithFarm = false;
        randomValue = Random.Range (1, 101);
    
    }
    
    void OnTriggerEnter2D(Collider2D col)
    {
        if (col.tag == "playerKnife") {
            if (collidedwithFarm == false) {
                text.text = " " + randomValue;
                Debug.Log ("NOT COLLISION");
                GameController.Fruit+= randomValue;
            }
            else if (collidedwithFarm == true) {
                Debug.Log ("COLLISION");
                GameController.Fruit+= EnemyTheft.scoreValue+ randomValue;                          
                Debug.Log("Player gets back: " + EnemyTheft.scoreValue);
                wallet += EnemyTheft.scoreValue + randomValue;  
                text.text = " " + wallet;
                Debug.Log ("In total:  " + wallet);
            }
        }
    }
    

    硬币脚本:

    public Text FruitText;
    public static int Fruit = 10; 
    
    void Start()
    {
        SetFruitText ();
        Fruit = 10; 
    }
    
    
    void SetFruitText ()
    {
        FruitText.text = "Fruits: " + Fruit.ToString();
    }
    

1 个答案:

答案 0 :(得分:0)

你不需要

public bool collidedwithFarm = false;

删除它,然后在 EnemyTheft.cs 中使用此代码:

void OnTriggerEnter2D(Collider2D col)
{
    if (col.tag == "Farm") 
    {
        scoreValue = Random.Range (1, GameController.Fruit);
        GameController.Fruit-= scoreValue;
    }
}

Enemy.cs

void OnTriggerEnter2D(Collider2D col)
{
    if (col.tag == "playerKnife") 
    {
        int payBack = randomValue + EnemyTheft.coinsStolen;
        GameController.Fruit += payBack;
        wallet -= payBack;  
    }
}

希望这有帮助。