Study] Photon Cloud(Unity)-12
- 김영호
- 2023년 1월 31일
- 1분 분량
최종 수정일: 2023년 4월 25일
Photon Cloud 지원 기능
Functions
- PhotonNetwork.Instnatiate(stirng prefabName, Vectro3 position, Quaternion rotation);
Photon Cloud의 Instantiate 기능, 다른 클라이언트상에도 똑같이 생성해준다.
기존의 GameObject를 받아 생성하는 것이 아닌 Prefab의 이름을 입력 받아 생성하는 것이 특징 (반드시 Resources 폴더 안에 있어야한다.)
Components
- Photon View
다른 클라이언트에도 보여주기
Ownership : Photon Cloud 지원의 Player반환
IsMine : 해당 클라이언트에게 소유권이 있는가
- Photon Transform View
Transform 변경 시 다른 클라이언트에 적용하기
GameManager.cs
using Photon.Pun;
using Photon.Realtime;
public class GameManager : MonoBehaviourPunCallbacks, IPunObservable
{
//내가 선택한 슈터 이름
string shooter = PhotonNetwork.LocalPlayer.CustomProperties["Shooter"].ToString();
//Transform data
Vector3 pos = transform.position;
Quaternion rot = transform.rotation;
//Prefab name
string prefabName = "Prefabs\\";
if(shooter == "Raptor")
{
prefabName += raptor.name;
pos += Vector3.left; //Left side
}
else if(shooter == "Phantom")
{
prefabName += phantom.name;
pos += Vector3.right; //Right side
}
GameObject shooterObj = PhotonNetwork.Instantiate(prefabName, pos, rot);
}
선택된 Shooter에 따른 값에 따라 Prefab과 위치를 정해서 PhotonNetwork.Instantiate() 함수를 사용해 동적 생성해준다.
Shooter

Component로 Photon View와 Photon Transform View를 추가해 주면 Photon Cloud로 연결되어 있는 다른 클라이언트에서 동기화 해줄 수 있다.
public class Shooter : MonoBehaviour
{
[Header("Stat")]
public float speed = 2.0f;
protected PhotonView photonView;
protected virtual void Start()
{
photonView = GetComponent<PhotonView>();
}
void Update()
{
//내 슈터일때만 키입력을 받아서 이동
if (photonView.Owner.IsLocal) //혹은 if (PhotonView.IsMine)
Move();
}
public void Move()
{
//Input
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
//Calculation
Vector3 mov = new Vector3(h, v, 0) * speed * Time.deltaTime;
//Transform
transform.Translate(mov);
}
}