FigeraldS писал(а):В примерах различных было, что нужно на каждого объекта наложить PhotonTransfrormView и поставить галочку у Position.
https://wampi.ru/image/Rw8WlLO
Через галочку не работает(
Alkos26Rus писал(а):Ну да можно и так, по разному можно. Можно с помощью OnPhotonSerializeView передавать 2 вектора (позиция, поворот), только в настройках PhotonView нужно поставить тип передачи On Change. Можно послать буферезированное сообщение [PunRPC] с позицией и поворотом, плюс в том что отправляется один раз, минус - при смене мастер клиента удаляется, нужно как то от имени комнаты посылать, не помню как, нужно доки смотреть.
Пробовал с
OnPhotonSerializeView изменять цвет объекта. Правильно понимаю, что нужно создать скрипт, реализующий
IPunObservable и на каждый объект, которые будет создаваться на сцене навесить его.
Используется csharp
public class PrefabController : MonoBehaviour, IPunObservable
{
private int materialId;
private Transform[] transformArray;
[SerializeField]
private GameObject prefab;
public static PrefabController Instance
{
get; private set;
}
public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
{
//Мы пишем данные
if (stream.IsWriting)
{
stream.SendNext(materialId);
}
else //Иначе читаем.
{
materialId = (int)stream.ReceiveNext();
}
}
// Start is called before the first frame update
void Start()
{
Instance = this;
transformArray = prefab.GetComponentsInChildren<Transform>();
}
// Update is called once per frame
void Update()
{
if (HittedObj != null)
{
SetMaterial();
HittedObj = null;
}
}
public GameObject HittedObj { get; set; }
/// <summary>
/// Устанавливает материал на объект.
/// </summary>
public void SetMaterial() { //Устанавливает материал на объект }
}
HittedObj -- индекс Material, который ставлю в MeshRenderer, изменяю через другой скрипт, в котором на объект, на который тыкнули на сцене передается индекс материала.
Эта штука работает не обновляет данные для других пользователей, только для себя цвет меняется.