如何解决光子碰撞问题
好的,所以我对光子还是陌生的,我正尝试在一次被击中并输掉一局的游戏中运行它。尽管我认为我的设置正确,但我的成绩正在更新两位选手。请注意,逻辑变量连接到第二个脚本。另外,可变玩家是通过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语句时出错。现在可以正常工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。