Si alguna vez estás construyendo un juego de disparos en primera persona para varios jugadores en Unity usando el complemento Photon, podrías encontrarte con este problema. El problema que discutimos es cuando tienes más de una cámara en tu escena porque hay una cámara conectada a cada objeto jugador. Esto hará que las cámaras se apilen una encima de la otra y que la cámara superior o principal no sea su cámara en primera persona, lo que significa que mientras controla su objeto de jugador local, es posible que no esté viendo su reproductor a través de su cámara.
Para solucionar este problema, debe desactivar la cámara de cada objeto de jugador que no sea su objeto de jugador local. Necesitará usar el componente de vista de Photon para verificar si la variable mía es falsa. Si es así, deberá usar una variable de cámara y establecer la variable de habilitación en falso. Esto hará que solo tengas una cámara activa en tu escena multijugador y esa será tu cámara local en primera persona. Al final de ésta implementación podrás tener la configuración para un prototipo de juego multijugador con camara independientes por cada player en la sala.
PlayerMovement
using Photon.Pun;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
private PhotonView PV;
private CharacterController myCC;
public float movementSpeed;
public float rotationSpeed;
// Start is called before the first frame update
void Start()
{
PV = GetComponent<PhotonView>();
myCC = GetComponent<CharacterController>();
}
// Update is called once per frame
void Update()
{
if(PV.IsMine && PhotonNetwork.IsConnected)
{
BasicMovement();
BasicRotation();
}
}
void BasicMovement()
{
if(Input.GetKey(KeyCode.W))
{
myCC.Move(transform.forward * Time.deltaTime * movementSpeed);
}
if (Input.GetKey(KeyCode.A))
{
myCC.Move(-transform.right * Time.deltaTime * movementSpeed);
}
if (Input.GetKey(KeyCode.S))
{
myCC.Move(-transform.forward * Time.deltaTime * movementSpeed);
}
if (Input.GetKey(KeyCode.D))
{
myCC.Move(transform.right * Time.deltaTime * movementSpeed);
}
}
void BasicRotation()
{
float mouseX = Input.GetAxis("Mouse X") * Time.deltaTime * rotationSpeed;
transform.Rotate(new Vector3(0, mouseX, 0));
}
}
AvatarSetup
using Photon.Pun;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AvatarSetup : MonoBehaviour
{
private PhotonView PV;
public GameObject myCharacter;
public int characterValue;
// Start is called before the first frame update
void Start()
{
PV = GetComponent<PhotonView>();
if (PV.IsMine)
{
PV.RPC("RPC_AddCharacter", RpcTarget.AllBuffered, PlayerInfo.PI.mySelectedCharacter);
}
}
[PunRPC]
void RPC_AddCharacter(int whichCharacter)
{
characterValue = whichCharacter;
myCharacter = Instantiate(PlayerInfo.PI.allCharacters[whichCharacter], transform.position, transform.rotation, transform);
}
}
MenuController
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MenuController : MonoBehaviour
{
public void OnClickCharacterPick(int whichCharacter)
{
if (PlayerInfo.PI != null)
{
PlayerInfo.PI.mySelectedCharacter = whichCharacter;
PlayerPrefs.SetInt("MyCharacter", whichCharacter);
}
}
}
PlayerInfo
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerInfo : MonoBehaviour
{
public static PlayerInfo PI;
public int mySelectedCharacter;
public GameObject[] allCharacters;
private void OnEnable()
{
if (PlayerInfo.PI == null)
{
PlayerInfo.PI = this;
}
else
{
if (PlayerInfo.PI != this)
{
Destroy(PlayerInfo.PI.gameObject);
PlayerInfo.PI = this;
}
}
DontDestroyOnLoad(this.gameObject);
}
// Start is called before the first frame update
void Start()
{
if (PlayerPrefs.HasKey("MyCharacter"))
{
mySelectedCharacter = PlayerPrefs.GetInt("MyCharacter");
}
else
{
mySelectedCharacter = 0;
PlayerPrefs.SetInt("MyCharacter",mySelectedCharacter);
}
}
}
¿Quieres acceder al proyecto completo?
¡Registrate y hazte Premium!
¿Quieres publicar tus propios proyectos?. ¡Pues que esperas!

ZoeGeop Technologies
MarketPlace
Crea tu cuenta
Suscríbete
[latest-selected-content output=»slider» limit=»4″ date_limit=»1″ date_start=»2″ date_start_type=»months» image=»medium» css=»four-columns tall as-overlay light» type=»post» status=»publish» taxonomy=»category» orderby=»dateD» show_extra=»category» slidermode=»fade» slideslides=»1″ slidescroll=»1″ sliderinfinite=»true» slidercontrols=»true» sliderauto=»true» sliderspeed=»3000″ chrlimit=»120″ url=»yes»]
Suscríbete a nuestro canal de YouTube
Síguenos en nuestro canal de YouTube dedicado a tecnología, marketplace de proyectos tecnológicos, cursos online y tutoriales de desarrollo de videojuegos. Ofrecemos consultoría en desarrollo de software, marketing online, servicios de TI, hosting web, dominios web y más.
Siguenos en Patreon
Si quieres contribuir con cualquier aporte o donación hacia nuestros proyectos y el canal puedes hacerlo a través de nuestra cuenta en Patreon.



