光子碰撞问题

时间:2020-08-11 12:37:14

标签: user-interface collision multiplayer photon

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

1 个答案:

答案 0 :(得分:0)

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

相关问题