光子碰撞问题

问题描述 投票:0回答:1

好吧,我是光子的新手,我正在尝试在一个基于被击中一次并输掉回合的游戏上运行它。我的分数,虽然我认为我的设置正确,但正在更新两个玩家。请注意逻辑变量连接到第二个脚本。此外,变量玩家是您通过 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;
}
c# unity-game-engine photon photon-pun
1个回答
0
投票

哈哈,答案是糟糕的编程。这确实有效。如果您查看我的 MPGameLogic 文件,您可能会注意到两个 if 语句缺少 {},这会导致错误,而我的代码中包含调试语句。现在完美运行。

© www.soinside.com 2019 - 2024. All rights reserved.