【发布时间】:2020-01-22 23:32:42
【问题描述】:
我刚接触统一,正在为我的相机的奇怪行为而苦苦挣扎。 我正在使用 Photon 插件编写在线多人游戏。
奇怪的行为:
-
Player1 登录
--> 一切顺利
-
Player2 登录
--> Player1 的 Camera 切换到 Player2 角色
--> Player2的Camera切换到Player1角色
-
Player3 登录
--> Player 1 和 Player2 的相机切换到 Player3 角色
--> Player3的Camera切换到Player2角色。
(但移动控制对每个玩家都有效)
我有一个角色的预制件,它在检查器中安装了一个摄像头。
这是我的初始化代码:
public class NetworkPlayer : Photon.Pun.MonoBehaviourPun, Photon.Pun.IPunObservable
{
public Animator anim;
private Vector3 correctPlayerPos;
private Quaternion correctPlayerRot;
public GameObject myCam;
// Start is called before the first frame update
void Start()
{
if(photonView.IsMine)
{
Debug.Log("PhotonView.IsMine == true");
//Kamera und Steuerung aktivieren
myCam = GameObject.Find("Camera");
myCam.SetActive(true);
GetComponent<PlayerMovement>().enabled = true;
Debug.Log("Steuerung und Cam aktiviert...");
}
}
// Update is called once per frame
void Update()
{
if(!photonView.IsMine)
{
transform.position = Vector3.Lerp(transform.position, this.correctPlayerPos, Time.deltaTime*5);
transform.rotation = Quaternion.Lerp(transform.rotation, this.correctPlayerRot, Time.deltaTime * 5);
}
}
//Exchange Position data
public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info){
if(stream.IsWriting)
{
//Send data to others
stream.SendNext(transform.position);
stream.SendNext(transform.rotation);
stream.SendNext(anim.GetBool("Run"));
}
else
{
//Receive data from others
this.correctPlayerPos = (Vector3) stream.ReceiveNext();
this.correctPlayerRot = (Quaternion) stream.ReceiveNext();
anim.SetBool("Run", (bool) stream.ReceiveNext());
}
}
}
我还尝试通过检查器而不是搜索它来连接相机,就像上面的代码示例一样。 希望任何人都可以帮助我:(
感谢您的宝贵时间!
【问题讨论】:
-
GameObject.Find 将在当前运行的场景中搜索与给定字符串匹配的名称。如果有多个同名的游戏对象,则它不是查找特定游戏对象的可靠方法。您可能想看看这是否是问题所在,在这种情况下,请以不同的方式找到您的相机。
-
嗨,西蒙,感谢您的快速回答!我还尝试直接在 Inspector 中分配相机。但这并没有解决问题。
-
在inspector中赋值是什么意思?
-
我将变量 GameObject myCam 声明为 public 并将相机(附加到播放器预制件)拉到脚本(也附加到预制件)中。我还删除了 start 方法中的 GameObject.find 命令。
标签: unity3d camera multiplayer photon