【发布时间】:2013-06-17 14:56:45
【问题描述】:
我已经在 Unity 中工作了一段时间,并且通过遵循 this 教程获得了基本的多人游戏设置。但是,我想添加更多的东西,其中之一是跟随每个玩家的相机。我已经查过了,甚至发现了该教程的创建者的评论。所以我按照他的解释,得到了这个代码:
function spawnPlayer(){
var player:GameObject=Network.Instantiate(playerPrefab,spawnObject.position,Quaternion.identity,0);
Destroy(Camera.main);
if(player.networkView.isMine){
var playercam:Transform=player.transform.find("Camera");
playercam.tag="MainCamera";
}
}
我忘了说,玩家对象有一个相机,它被选为“playerPrefab”游戏对象。
这种工作,但不是真的。当我启动服务器时,相机会很好地跟随你。但是,当我打开另一个文件并加入该主机时,我开始觉得很奇怪。奇怪,我的意思是当我在服务器游戏中移动时,相机会跟随客户端游戏中的服务器玩家,而当我在客户端游戏中移动时,相机会跟随服务器游戏中的客户端。对我来说这毫无意义。
感谢任何人对此问题的意见,或者如何解决它。谢谢
【问题讨论】:
-
您只想制作一个摄像头,不要在播放器预制件中包含摄像头。我认为您创建了太多相机。
-
所以如果我不给玩家一个摄像头,我该怎么处理主摄像头才能让它跟随玩家
-
附加一个脚本,强制相机跟随正确的玩家对象。
-
是的,我在想,就像每个客户一样,相机会跟随最后一个玩家加入...但是我不知道如何获取某个对象的实例数,并且选择一个特定的。
-
@JeremyDarrach 我认为这里存在脱节。谁打电话给
SpawnPlayer,是服务器还是客户端?如果是客户端,您可以跳过 isMine ,直接获取主摄像头。如果是服务器,那么您需要将 Network.Instantiate 下的所有内容移动到附加到播放器预制件的脚本上的 MonoBehaviour.OnNetworkIsInstantiate。
标签: unity3d multiplayer