- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我制作 2D 游戏时,问题是当第一个玩家创建并出现在房间中时,他的摄像头正常工作,但是当新玩家进入房间时,第一个玩家通过第二个玩家的摄像头看到一切。此外,如果第三个玩家连接,第一个和第二个玩家可以通过第三个玩家的摄像头看到一切,依此类推。
Player prefab在GameManager类中实例化,仅在游戏场景中
public class GameManager : MonoBehaviourPunCallbacks
{
public GameObject playerPrefab;
public Transform spawnPoint;
public void Start()
{
GameObject player = PhotonNetwork.Instantiate(this.playerPrefab.name, spawnPoint.position, Quaternion.identity);
player.GetComponent<FireFighterHeroController>().enabled = true;
player.GetComponent<CameraControler>().enabled = true;
player.GetComponent<CameraControler>().SetTarget(player.transform);
}
#region PUN Callbacks
public override void OnLeftRoom()
{
SceneManager.LoadScene(1);
}
#endregion
#region Custom Methods
public void OnClickLeaveRoom_Btn()
{
PhotonNetwork.LeaveRoom();
}
#endregion
}
简单的相机 Controller
public class CameraControler : MonoBehaviour
{
private Transform target;
public GameObject camera;
public Vector3 offset;
public void SetTarget(Transform target)
{
this.target = target;
}
public void LateUpdate()
{
camera.transform.position = target.position + offset;
}
}
UPD 找到了解决方案
我将相机 Controller 的脚本移到了玩家的相机上,在玩家的实例中我搜索了这个相机,打开它并将玩家的变换传输给它。
不确定这种方法,但它至少有效。
这是怪物
public class GameManager : MonoBehaviourPunCallbacks
{
public Transform spawnPoint;
public void Start()
{
GameObject player = PhotonNetwork.Instantiate("Player", spawnPoint.position, Quaternion.identity);
if (!player.GetPhotonView().IsMine)
return;
player.GetComponent<FireFighterHeroController>().enabled = true;
player.transform.Find("Camera").gameObject.GetComponent<CameraControler>().enabled = true;
player.transform.Find("Camera").gameObject.GetComponent<CameraControler>().SetTarget(player.transform);
player.transform.Find("Camera").gameObject.SetActive(true);
}
}
和相机 Controller
public class CameraControler : MonoBehaviour
{
private Transform target;
public Vector3 offset;
public void SetTarget(Transform target)
{
this.target = target;
}
public void LateUpdate()
{
gameObject.transform.position = target.position + offset;
}
}
最佳答案
更新 - 在您发表评论后
您正在向所有玩家发送命令。
在发送命令之前,您应该检查接收命令的玩家是否是新玩家的所有者。
基本上你就是这样做的。
=> 创建播放器
=> 分配相机
什么时候应该这样做。
=> 创建播放器
=> 检查这是否是您的客户 => 分配相机
要实现这一点,您需要添加此检查:
if (photonView.IsMine) AssignCamera();
我看到您在管理器中发送命令。所以你有这些解决方案:
public class YourPlayer : Photon.MonoBehaviour
{
public void Start()
{
//stop assigning controls if this is not the player related to this peer
if(!photonView.IsMine) return;
player.GetComponent<FireFighterHeroController>().enabled = true;
player.GetComponent<CameraControler>().enabled = true;
player.GetComponent<CameraControler>().SetTarget(player.transform);
}
}
我不确定您代码的所有逻辑。有些代码应该适用于所有玩家,有些代码应该只适用于 Peer Related 玩家。
我认为您应该像这样更改 Start 方法:
public void Start()
{
GameObject player = PhotonNetwork.Instantiate(this.playerPrefab.name, spawnPoint.position, Quaternion.identity);
//stop assigning controls if this is not the player related to this peer
if(!player.GetPhotonView().IsMine) return;
player.GetComponent<FireFighterHeroController>().enabled = true;
player.GetComponent<CameraControler>().enabled = true;
player.GetComponent<CameraControler>().SetTarget(player.transform);
}
关于c# - Photon中如何为玩家初始化相机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56235834/
我正在制作PHOTON的房间列表系统,但是。这个命令不太好用。我该怎么补救?。。。。这个命令只有在我第一次进入大堂时才起作用。。当我在开发版本中创建文件室时,此命令不起作用
Photon Server 和 Photon Cloud 产品有什么区别? 最佳答案 来自 http://doc.exitgames.com/photon-server/ 光子服务器与光子云 光子服务
我有一个项目,过去可以很好地将其加载到Eclipse Oxygen。最近,我将Eclipse升级为Photon。从那时起,当我尝试导入项目时开始出现以下错误。有关如何解决此问题的任何想法?我正在使用G
从 Eclipse Oxygen (4.7) 迁移到 Eclipse Photon (4.8) 引入了键盘布局错误的奇怪问题,仅针对快捷方式。 我的意思是,例如: 在任何编辑器中,键入 A 键都会产生
我已经在Photon Server官方论坛上提出了这个问题,但是它没有本网站那么活跃,所以可能有些人了解我在说什么,因此,如果您有时间和知识,请与我分享。谢谢! 来了... 因此,我在Photon上有
我正在尝试在 Unity 中制作一款多人空气曲棍球游戏,但遇到了一些问题。当第一个用户创建房间时,冰球会与第一个玩家的木槌(您用来击打冰球的物体)一起生成。当第二个玩家连接到 Photon 服务器时,
使用 Java 18.3 运行 Eclipse Photon 时,我无法打开 Marketplace 客户端。 我没有像 Eclipse Photon - Eclipse Marketplace no
作为Photon的新手,有以下问题: 看起来 VMware 正在尝试创建与 Docker 并行的容器技术。由于现阶段docker比较成熟,使用photon有什么好处/优势吗? 我知道有人可以在内部使用
该函数应该比较两个整数并在屏幕上打印关系尽管如此,三元运算符在语法上是正确的,并且已经在 Visual Studio IDE 上运行,当使用 gcc 编译时,它在 Eclipse 中给出了错误: er
我已经转移到具有现有工作区的 Eclipse Photon。我在这个工作区中有一些 Maven 项目。所有项目在 Eclipse Oxygen 中都没有任何错误。在 Eclipse Photon 中打
我试图了解 Photon Networking 到底是什么 主客户端。 文档给 folowing该术语的使用场景: In absence of a server, it can be made res
我刚刚安装了 Eclipse Photon。我将一个项目从 Oxygen 迁移到它 - 一切正常。 我注意到的问题是我无法打开 Eclipse Marketplace。每当我点击它时,我都会得到 1-
我们在触发事件时使用 ExitGames Photon Realtime 引擎接收此回调 customEventAction(int playerNr, nByte
昨晚我像平常一样关闭了计算机。然后我今天回到家,打开我的电脑,打开eclipse,然后我的所有代码都带有红色下划线。我也不知道为什么。例如,对于 import java.util.Scanner,它显
我是按照PUN基础教程的步骤来的。现在我达到了我想要的一部分将我当前的位置发送给房间里我的另一个玩家以移动他。我可以在每次更新时打印我的位置,我需要的是知道如何将位置发送给另一个玩家以移动他。假设我有
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 1 年前。 Improve
我正在寻找一种从 Shiny App 创建独立应用程序的简单方法。我第一次看到 Katie 的“Shiny meet electron”演讲(见谷歌)。浏览了他们的网站后,我认为 Photon 是他们
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
我开始使用 Photon Networking for Unity,但遇到了一个问题。我想添加到播放器中的 CustomProperties,然后我想调试结果。但是调试打印“Null”。我在创建房间后
我正在编码一个黑洞(实际上是绕黑洞运行的光子),我需要处理小于限制距离的半径值的异常 我尝试过使用 if 和 while True def Hamiltonian(r, pt, pr, pphi):
我是一名优秀的程序员,十分优秀!