光子碰撞问题

问题描述

好的,所以我对光子还是陌生的,我正尝试在一次被击中并输掉一局的游戏中运行它。尽管我认为我的设置正确,但我的成绩正在更新两位选手。请注意,逻辑变量连接到第二个脚本。另外,可变玩家是通过Photon的玩家ID。继承人代码

MPMovement.cs

void OnCollisionEnter2D(Collision2D other)
    {
        if (photonView.Ismine)
        {
            //This looks for players landing after a jumps,calls correctly to the animator and then
            //Begins to set everything back to the way it was. Still not sure about setting veLocity
            //To zero,but why fix what isn't broken,amirite?
            if (other.gameObject.CompareTag("Ground") || other.gameObject.CompareTag("Player"))
            {
                jumpCount = jumps;
                //rbody.veLocity = Vector2.zero;
                anim.SetBool("grounded",true);
                anim.SetBool("jumping",false);
            }
            //This looks for a hit from another player. This will trigger whether it is a standing or crouching hit,as the
            //Results will be the exact same either way it plays out; if someone is hit,they die.
            //On a hit. All hitBoxes are shut off (avoid multiple hits) and the win counter goes up.
            //It then notifies the other player they have been hit,sets their dead trigger,and deducts a win.
            //After everything has been set,logic is then sent for to see if the game is over.
            if (other.gameObject.tag == "Player" && (other.otherCollider.name == "StandHitBox" || other.otherCollider.name == "CrouchHitBox"))
            {
                SHitBox.enabled = false;
                CHitBox.enabled = false;
                logic.AddWin(playerNum);
                other.gameObject.GetComponent<Animator>().SetTrigger("die");
                other.gameObject.GetComponent<Movement>().isDead = true;
                Debug.Log("In");
                StartCoroutine(winWait());
                Debug.Log("Out");
            }
        }
    }

MPGameLogic:

    //Simply game over logic that checks for a best two of three game
    //I chose to decrement a win on a loss. This is because,at least in a
    //1v1 the games would be ending in about a miniute or two and I want
    //people to be able to enjoy a game with multiple rounds.
    public void CheckWin()
    {
        if (wins == 5)
        {
            Debug.Log("GameOver! " + PhotonNetwork.NickName + " Wins!!!");
            //Need to fix this. Lots should be here to actually exit and leave room
            SceneManager.LoadScene(SceneManager.GetActiveScene().buildindex - 1);
        }
        newRound();
    }
    void Updatescore(string player)
    {
        players = GameObject.FindGameObjectsWithTag("Player");
        
        for(int i = 0; i < players.Length; i++){
            Debug.Log(players[i].name);
            if(players[i].name != "StandHitBox" && players[i].name != "CrouchHitBox")
                if(players[i].GetComponent<MPMovement>().playerNum == player)
                    Debug.Log("Updating for player " + (i % 2) + " via " + winText[i % 2].name);
                    winText[i % 2].GetComponent<TextMeshProUGUI>().text = wins + "";
        }
    }
    public void AddWin(string player)
    {
        wins++;
        Updatescore(player);
        CheckWin();
        GameObject.Find("Canvas").GetComponent<Timer>().Reset();
    }
    public void SubWin(string index)
    {
        if (wins > 0)
        {
            wins--;
            Updatescore(index);
        }
    }
    //Whenever we go to another round we need the positions to reset
    //This also includes 
    public void newRound()
    {
        player.transform.position = locations[0];
        return;
    }

解决方法

大声笑是不好的编程。这确实有效。如果查看我的MPGameLogic文件,您可能会注意到两个if语句缺失{},这会导致我在代码中包含debug语句时出错。现在可以正常工作。