通过 Photon 同步翻转游戏对象子项的逻辑问题
Logic issue syncronizing flip of gameobjects child through Photon
在我的项目中,我正在创建一个类似 "Madness combat" 的游戏,但通过 Photon 网络进行多人游戏。我目前遇到的问题是错误的客户 "hand + gun" 被翻转了。
当客户 1 翻转他的角色时,他的手在本地翻转,客户 2 的手在本地翻转。
图片:https://imgur.com/a/NkP3KEF
我认为问题如下:
在我的角色翻转逻辑中,我需要一个 PunRPC 来翻转错误的客户手。
主角翻转功能:
void FixedUpdate()
{
if (!disableMove)
{
//if (!devTesting)
//{
if (photonView.isMine)
{
isGrounded = Physics2D.OverlapCircle(groundCheck.position, checkRadius, whatIsGround);
moveInput = Input.GetAxis("Horizontal");
rb.velocity = new Vector2(moveInput * speed, rb.velocity.y);
if (facingRight == false && moveInput > 0)
{
photonView.RPC("Flip", PhotonTargets.AllBuffered);
photonView.RPC("Fliphand", PhotonTargets.AllBuffered); //FLIPS HAND+GUN
//Flip();
}
else if (facingRight == true && moveInput < 0)
{
photonView.RPC("Flip", PhotonTargets.AllBuffered);
photonView.RPC("Fliphand", PhotonTargets.AllBuffered); //FLIPS HAND+GUN
//Flip();
}
}
}
以上函数调用了这两个 PunRPC 函数。
字符翻转:
[PunRPC]
void Flip()
{
facingRight = !facingRight; //toggle flipping
GetComponent<SpriteRenderer>().flipX = !facingRight;
}
Hand flip(上述游戏对象的子对象):
[PunRPC]
void Fliphand()
{
child = GameObject.Find("Hand");
sight = GameObject.Find("Granny_warr_lasersight");
deagle = GameObject.Find("deagle_animation");
facingRight2 = !facingRight2;
child.GetComponent<SpriteRenderer>().flipY = !facingRight2;
sight.GetComponent<SpriteRenderer>().flipY = !facingRight2;
deagle.GetComponent<SpriteRenderer>().flipY = !facingRight2;
}
我认为问题是因为两个客户端加入了房间,并且两个客户端都有名为 "Hand" 等的子对象。通过从客户端 1 调用这个 PunRPC,它翻转了客户端 2 屏幕上的 "Hand" .
谁能帮我解决这个问题?如果需要,我会尽量让它更清楚,如果需要,我会提供更多图片。
注意:字符翻转在两个客户端上都可以正常工作。
感谢 Tomer Shahar 提供的 link 我解决了它!
[PunRPC]
void Fliphand()
{
//if (photonView.isMine)
//{
//child = GameObject.Find("Hand");
//sight = GameObject.Find("Granny_warr_lasersight");
//deagle = GameObject.Find("deagle_animation");
child = player.transform.Find("Hand").gameObject;
sight = child.transform.Find("Granny_warr_lasersight").gameObject;
deagle = child.transform.Find("deagle_animation").gameObject;
facingRight2 = !facingRight2;
child.GetComponent<SpriteRenderer>().flipY = !facingRight2;
sight.GetComponent<SpriteRenderer>().flipY = !facingRight2;
deagle.GetComponent<SpriteRenderer>().flipY = !facingRight2;
//}
}
//disabled 代码是对我的应用程序不起作用的旧代码。新的就像一个魅力!
在我的项目中,我正在创建一个类似 "Madness combat" 的游戏,但通过 Photon 网络进行多人游戏。我目前遇到的问题是错误的客户 "hand + gun" 被翻转了。
当客户 1 翻转他的角色时,他的手在本地翻转,客户 2 的手在本地翻转。
图片:https://imgur.com/a/NkP3KEF
我认为问题如下: 在我的角色翻转逻辑中,我需要一个 PunRPC 来翻转错误的客户手。
主角翻转功能:
void FixedUpdate()
{
if (!disableMove)
{
//if (!devTesting)
//{
if (photonView.isMine)
{
isGrounded = Physics2D.OverlapCircle(groundCheck.position, checkRadius, whatIsGround);
moveInput = Input.GetAxis("Horizontal");
rb.velocity = new Vector2(moveInput * speed, rb.velocity.y);
if (facingRight == false && moveInput > 0)
{
photonView.RPC("Flip", PhotonTargets.AllBuffered);
photonView.RPC("Fliphand", PhotonTargets.AllBuffered); //FLIPS HAND+GUN
//Flip();
}
else if (facingRight == true && moveInput < 0)
{
photonView.RPC("Flip", PhotonTargets.AllBuffered);
photonView.RPC("Fliphand", PhotonTargets.AllBuffered); //FLIPS HAND+GUN
//Flip();
}
}
}
以上函数调用了这两个 PunRPC 函数。
字符翻转:
[PunRPC]
void Flip()
{
facingRight = !facingRight; //toggle flipping
GetComponent<SpriteRenderer>().flipX = !facingRight;
}
Hand flip(上述游戏对象的子对象):
[PunRPC]
void Fliphand()
{
child = GameObject.Find("Hand");
sight = GameObject.Find("Granny_warr_lasersight");
deagle = GameObject.Find("deagle_animation");
facingRight2 = !facingRight2;
child.GetComponent<SpriteRenderer>().flipY = !facingRight2;
sight.GetComponent<SpriteRenderer>().flipY = !facingRight2;
deagle.GetComponent<SpriteRenderer>().flipY = !facingRight2;
}
我认为问题是因为两个客户端加入了房间,并且两个客户端都有名为 "Hand" 等的子对象。通过从客户端 1 调用这个 PunRPC,它翻转了客户端 2 屏幕上的 "Hand" .
谁能帮我解决这个问题?如果需要,我会尽量让它更清楚,如果需要,我会提供更多图片。
注意:字符翻转在两个客户端上都可以正常工作。
感谢 Tomer Shahar 提供的 link 我解决了它!
[PunRPC]
void Fliphand()
{
//if (photonView.isMine)
//{
//child = GameObject.Find("Hand");
//sight = GameObject.Find("Granny_warr_lasersight");
//deagle = GameObject.Find("deagle_animation");
child = player.transform.Find("Hand").gameObject;
sight = child.transform.Find("Granny_warr_lasersight").gameObject;
deagle = child.transform.Find("deagle_animation").gameObject;
facingRight2 = !facingRight2;
child.GetComponent<SpriteRenderer>().flipY = !facingRight2;
sight.GetComponent<SpriteRenderer>().flipY = !facingRight2;
deagle.GetComponent<SpriteRenderer>().flipY = !facingRight2;
//}
}
//disabled 代码是对我的应用程序不起作用的旧代码。新的就像一个魅力!