Photon Pun 2 | Unity | управление машины игроком

Photon Pun 2 | Unity | управление машины игроком

Сообщение Laurean 01 ноя 2021, 22:32

Например на сцене 2 игрока - А и Б. Игрок Б садиться в машину и ездит на ней, но у игрока А передвигается только сам игрок Б, а машина не двигается.
Я уже много что пере про бывал и не знаю что делать дальше.
Вот скрипт машины:
using UnityEngine;
using Photon.Pun;
using System.Linq;

public class AutoController : MonoBehaviourPun
{
public float SpeedCar;
public float MinSpeed;
public float MaxSpeed;
public float Manevrenost;

public GameObject LeftWheelsOne;
public GameObject RightWheelsOne;

public GameObject LeftWheelsTwo;
public GameObject RightWheelsTwo;

public float DriftFloat;
public float MaxDriftFloat;

public bool OffOrOn;
public bool ifPlayer;
PhotonView View;
public GameObject Player;
public float X;
public float Z;

[PunRPC]
public void Start()
{
Player = gameObject;
}

[PunRPC]
void Update()
{
View = Player.GetComponent<PhotonView>();

if (View.IsMine || ifPlayer == true)
{


if (Input.GetKey(KeyCode.K) && ifPlayer == true)
{
OffOrOn = true;
}

if (SpeedCar < 0)
{
SpeedCar = 0;
}

if (Input.GetKey(KeyCode.W) && OffOrOn == true)
{
if (SpeedCar < MinSpeed)
{
SpeedCar = MinSpeed;
}
if (SpeedCar > MaxSpeed)
{
SpeedCar = MaxSpeed;
}

if (DriftFloat < MaxDriftFloat)
{
DriftFloat += Time.deltaTime;
}
SpeedCar += Time.deltaTime;
LeftWheelsOne.transform.Rotate(new Vector3(0, 45, 0) * SpeedCar * Time.deltaTime);
RightWheelsOne.transform.Rotate(new Vector3(0, 45, 0) * SpeedCar * Time.deltaTime);
LeftWheelsTwo.transform.Rotate(new Vector3(0, 45, 0) * SpeedCar * Time.deltaTime);
RightWheelsTwo.transform.Rotate(new Vector3(0, 45, 0) * SpeedCar * Time.deltaTime);
gameObject.transform.position -= gameObject.transform.forward * SpeedCar * Time.deltaTime;
}
else
{
SpeedCar -= 2;

if (SpeedCar > 0)
{
gameObject.transform.position -= gameObject.transform.forward * SpeedCar * Time.deltaTime;
}
}



if (Input.GetKey(KeyCode.A) && Input.GetKey(KeyCode.W) && OffOrOn == true)
{
if (DriftFloat > 0)
{
gameObject.transform.position += gameObject.transform.right * DriftFloat * Time.deltaTime;
DriftFloat -= Time.deltaTime;
DriftFloat -= Time.deltaTime;
}
gameObject.transform.Rotate(new Vector3(0, -25, 0) * Manevrenost * Time.deltaTime);
LeftWheelsOne.transform.localRotation = Quaternion.Euler(new Vector3(1 * SpeedCar, -30, 90));
RightWheelsOne.transform.localRotation = Quaternion.Euler(new Vector3(1 * SpeedCar, -30, 90));

LeftWheelsOne.transform.Rotate(new Vector3(0, 45, 0) * SpeedCar * Time.deltaTime);
RightWheelsOne.transform.Rotate(new Vector3(0, 45, 0) * SpeedCar * Time.deltaTime);

SpeedCar -= Time.deltaTime;
SpeedCar -= Time.deltaTime;
}
else if (Input.GetKey(KeyCode.D) && Input.GetKey(KeyCode.W) && OffOrOn == true)
{
if (DriftFloat > 0)
{
gameObject.transform.position -= gameObject.transform.right * DriftFloat * Time.deltaTime;
DriftFloat -= Time.deltaTime;
DriftFloat -= Time.deltaTime;
}
gameObject.transform.Rotate(new Vector3(0, 25, 0) * Manevrenost * Time.deltaTime);
LeftWheelsOne.transform.localRotation = Quaternion.Euler(new Vector3(1 * SpeedCar, +30, 90));
RightWheelsOne.transform.localRotation = Quaternion.Euler(new Vector3(1 * SpeedCar, +30, 90));

LeftWheelsOne.transform.Rotate(new Vector3(0, 45, 0) * SpeedCar * Time.deltaTime);
RightWheelsOne.transform.Rotate(new Vector3(0, 45, 0) * SpeedCar * Time.deltaTime);

SpeedCar -= Time.deltaTime;
SpeedCar -= Time.deltaTime;
}
else
{
LeftWheelsOne.transform.localRotation = Quaternion.Euler(new Vector3(0, 0, 90));
RightWheelsOne.transform.localRotation = Quaternion.Euler(new Vector3(0, 0, 90));
}
}
}

[PunRPC]
public void OnTriggerEnter(Collider other)
{
if(other.tag == "Player")
{
ifPlayer = true;
Player = other.gameObject;
}
}
}
что надо сделать что бы у игрока А и у Б машина двигалась?
Laurean
UNец
 
Сообщения: 2
Зарегистрирован: 10 фев 2021, 23:03

Re: Photon Pun 2 | Unity | управление машины игроком

Сообщение Alkos26Rus 02 ноя 2021, 10:05

В таком коде нечего не понятно, используй специальную вставку для кода. То что ты везде расставил [PunRPC] это не чего тебе не даст, смотри уроки по синхронизации в фатоне. Синхронизация машины сложнее чем персонажа, так как скорость большая, поэтому тебе нужно искать уроки или примеры по синхронизации именно машины.
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1640
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Photon Pun 2 | Unity | управление машины игроком

Сообщение Laurean 02 ноя 2021, 14:09

Alkos26Rus писал(а):В таком коде нечего не понятно, используй специальную вставку для кода. То что ты везде расставил [PunRPC] это не чего тебе не даст, смотри уроки по синхронизации в фатоне. Синхронизация машины сложнее чем персонажа, так как скорость большая, поэтому тебе нужно искать уроки или примеры по синхронизации именно машины.

Спасибо, я прислушался к вашему совету. Оказалось надо было написать всего одну строчку : photonView.RPC("AddForceExplode", RpcTarget.AllBuffered, (Vector3)transform.position);
Laurean
UNец
 
Сообщения: 2
Зарегистрирован: 10 фев 2021, 23:03


Вернуться в Photon

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1