Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
public class ThirdPersonNetwork : Photon.MonoBehaviour
{
HeroCamera cameraScript;
HeroCtrl controllerScript;
public Animator anim;
bool firstTake = false;
private Vector3 correctPlayerVel = Vector3.zero;
private Vector3 correctPlayerPos = Vector3.zero;//We lerp towards this
private Quaternion correctPlayerRot = Quaternion.identity; //We lerp towards this
public Rigidbody myRigidbody { get; private set; }
void OnEnable()
{
firstTake = true;
}
void Awake()
{
anim = GetComponent<Animator>();
cameraScript = GetComponent<HeroCamera>();
controllerScript = GetComponent<HeroCtrl>();
this.myRigidbody = this.GetComponent<Rigidbody>();
if (photonView.isMine)
{
//MINE: local player, simply enable the local scripts
cameraScript.enabled = true;
controllerScript.enabled = true;
}
else
{
cameraScript.enabled = false;
controllerScript.enabled = true;
controllerScript.isControllable = false;
}
gameObject.name = gameObject.name + photonView.viewID;
}
void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
{
PhotonNetwork.ConnectUsingSettings("Версия игры");
if (stream.isWriting)
{
anim = GetComponent<Animator>();
//We own this player: send the others our data
stream.SendNext(anim.GetFloat("AxisX"));
stream.SendNext(anim.GetFloat("AxisY"));
stream.SendNext(anim.GetBool("Jump"));
stream.SendNext(anim.GetBool("Grounded"));
stream.SendNext(anim.GetBool("Falling"));
stream.SendNext(anim.GetFloat("MouseX"));
stream.SendNext(anim.GetBool("Attack1"));
stream.SendNext(anim.GetBool("Attack2"));
stream.SendNext(anim.GetBool("Evade_F"));
stream.SendNext(anim.GetBool("Evade_B"));
stream.SendNext(anim.GetBool("Evade_L"));
stream.SendNext(anim.GetBool("Evade_R"));
stream.SendNext(anim.GetBool("Sprinting"));
stream.SendNext(anim.GetBool("Walking"));
stream.SendNext(anim.GetBool("Sneaking"));
stream.SendNext(anim.GetBool("Balancing"));
stream.SendNext(anim.GetBool("WallRunL"));
stream.SendNext(anim.GetBool("WallRunR"));
stream.SendNext(anim.GetBool("WallRunUp"));
stream.SendNext(anim.GetBool("WallHigh"));
stream.SendNext(anim.GetBool("WallLow"));
stream.SendNext(anim.GetInteger("RandomM"));
stream.SendNext(anim.GetBool("Climb"));
stream.SendNext(anim.GetBool("HangL"));
stream.SendNext(anim.GetBool("HangR"));
stream.SendNext(anim.GetBool("CornerL"));
stream.SendNext(anim.GetBool("CornerR"));
stream.SendNext(anim.GetBool("ClimbShort"));
stream.SendNext(anim.GetBool("Top"));
stream.SendNext(anim.GetBool("ClimbDownShort"));
stream.SendNext(anim.GetBool("ClimbDown"));
stream.SendNext(anim.GetBool("Overhang"));
stream.SendNext(anim.GetBool("Sword"));
stream.SendNext(anim.GetBool("Bow"));
stream.SendNext(anim.GetBool("Pistol"));
stream.SendNext(anim.GetBool("Rifle"));
stream.SendNext(anim.GetBool("StandUp"));
stream.SendNext(anim.GetBool("Dance"));
stream.SendNext(anim.GetBool("Pull"));
stream.SendNext(anim.GetBool("Push"));
stream.SendNext(anim.GetBool("Throw"));
stream.SendNext(anim.GetBool("CanLand"));
stream.SendNext(anim.GetFloat("WaterLevel"));
stream.SendNext(transform.position);
stream.SendNext(transform.rotation);
stream.SendNext(this.myRigidbody.velocity);
}
else
{
//Network player, receive data
anim.SetFloat("AxisX", (float)stream.ReceiveNext());
anim.SetFloat("AxisY", (float)stream.ReceiveNext());
anim.SetBool("Jump", (bool)stream.ReceiveNext());
anim.SetBool("Grounded", (bool)stream.ReceiveNext());
anim.SetBool("Falling", (bool)stream.ReceiveNext());
anim.SetFloat("MouseX", (float)stream.ReceiveNext());
anim.SetBool("Attack1", (bool)stream.ReceiveNext());
anim.SetBool("Attack2", (bool)stream.ReceiveNext());
anim.SetBool("Evade_F", (bool)stream.ReceiveNext());
anim.SetBool("Evade_B", (bool)stream.ReceiveNext());
anim.SetBool("Evade_L", (bool)stream.ReceiveNext());
anim.SetBool("Evade_R", (bool)stream.ReceiveNext());
anim.SetBool("Sprinting", (bool)stream.ReceiveNext());
anim.SetBool("Walking", (bool)stream.ReceiveNext());
anim.SetBool("Sneaking", (bool)stream.ReceiveNext());
anim.SetBool("Balancing", (bool)stream.ReceiveNext());
anim.SetBool("WallRunL", (bool)stream.ReceiveNext());
anim.SetBool("WallRunR", (bool)stream.ReceiveNext());
anim.SetBool("WallRunUp", (bool)stream.ReceiveNext());
anim.SetBool("WallHigh", (bool)stream.ReceiveNext());
anim.SetBool("WallLow", (bool)stream.ReceiveNext());
anim.SetInteger ("RandomM", (int)stream.ReceiveNext());
anim.SetBool("Climb", (bool)stream.ReceiveNext());
anim.SetBool("HangL", (bool)stream.ReceiveNext());
anim.SetBool("HangR", (bool)stream.ReceiveNext());
anim.SetBool("CornerL", (bool)stream.ReceiveNext());
anim.SetBool("CornerR", (bool)stream.ReceiveNext());
anim.SetBool("ClimbShort", (bool)stream.ReceiveNext());
anim.SetBool("Top", (bool)stream.ReceiveNext());
anim.SetBool("ClimbDownShort", (bool)stream.ReceiveNext());
anim.SetBool("ClimbDown", (bool)stream.ReceiveNext());
anim.SetBool("Overhang", (bool)stream.ReceiveNext());
anim.SetBool("Sword", (bool)stream.ReceiveNext());
anim.SetBool("Bow", (bool)stream.ReceiveNext());
anim.SetBool("Pistol", (bool)stream.ReceiveNext());
anim.SetBool("Rifle", (bool)stream.ReceiveNext());
anim.SetBool("StandUp", (bool)stream.ReceiveNext());
anim.SetBool("Dance", (bool)stream.ReceiveNext());
anim.SetBool("Pull", (bool)stream.ReceiveNext());
anim.SetBool("Push", (bool)stream.ReceiveNext());
anim.SetBool("Throw", (bool)stream.ReceiveNext());
anim.SetBool("CanLand", (bool)stream.ReceiveNext());
anim.SetFloat("WaterLevel", (float)stream.ReceiveNext());
correctPlayerPos = (Vector3)stream.ReceiveNext();
correctPlayerRot = (Quaternion)stream.ReceiveNext();
correctPlayerVel = (Vector3)stream.ReceiveNext();
// avoids lerping the character from "center" to the "current" position when this client joins
if (firstTake)
{
firstTake = false;
this.transform.position = correctPlayerPos;
transform.rotation = correctPlayerRot;
}
}
}
void Update()
{
if (!photonView.isMine)
{
//Update remote player (smooth this, this looks good, at the cost of some accuracy)
this.myRigidbody.velocity = Vector3.Lerp(this.myRigidbody.velocity, correctPlayerVel, Time.deltaTime * 5);
transform.position = Vector3.Lerp(transform.position, correctPlayerPos, Time.deltaTime * 5);
transform.rotation = Quaternion.Lerp(transform.rotation, correctPlayerRot, Time.deltaTime * 5);
}
}
}
using System.Collections;
public class ThirdPersonNetwork : Photon.MonoBehaviour
{
HeroCamera cameraScript;
HeroCtrl controllerScript;
public Animator anim;
bool firstTake = false;
private Vector3 correctPlayerVel = Vector3.zero;
private Vector3 correctPlayerPos = Vector3.zero;//We lerp towards this
private Quaternion correctPlayerRot = Quaternion.identity; //We lerp towards this
public Rigidbody myRigidbody { get; private set; }
void OnEnable()
{
firstTake = true;
}
void Awake()
{
anim = GetComponent<Animator>();
cameraScript = GetComponent<HeroCamera>();
controllerScript = GetComponent<HeroCtrl>();
this.myRigidbody = this.GetComponent<Rigidbody>();
if (photonView.isMine)
{
//MINE: local player, simply enable the local scripts
cameraScript.enabled = true;
controllerScript.enabled = true;
}
else
{
cameraScript.enabled = false;
controllerScript.enabled = true;
controllerScript.isControllable = false;
}
gameObject.name = gameObject.name + photonView.viewID;
}
void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
{
PhotonNetwork.ConnectUsingSettings("Версия игры");
if (stream.isWriting)
{
anim = GetComponent<Animator>();
//We own this player: send the others our data
stream.SendNext(anim.GetFloat("AxisX"));
stream.SendNext(anim.GetFloat("AxisY"));
stream.SendNext(anim.GetBool("Jump"));
stream.SendNext(anim.GetBool("Grounded"));
stream.SendNext(anim.GetBool("Falling"));
stream.SendNext(anim.GetFloat("MouseX"));
stream.SendNext(anim.GetBool("Attack1"));
stream.SendNext(anim.GetBool("Attack2"));
stream.SendNext(anim.GetBool("Evade_F"));
stream.SendNext(anim.GetBool("Evade_B"));
stream.SendNext(anim.GetBool("Evade_L"));
stream.SendNext(anim.GetBool("Evade_R"));
stream.SendNext(anim.GetBool("Sprinting"));
stream.SendNext(anim.GetBool("Walking"));
stream.SendNext(anim.GetBool("Sneaking"));
stream.SendNext(anim.GetBool("Balancing"));
stream.SendNext(anim.GetBool("WallRunL"));
stream.SendNext(anim.GetBool("WallRunR"));
stream.SendNext(anim.GetBool("WallRunUp"));
stream.SendNext(anim.GetBool("WallHigh"));
stream.SendNext(anim.GetBool("WallLow"));
stream.SendNext(anim.GetInteger("RandomM"));
stream.SendNext(anim.GetBool("Climb"));
stream.SendNext(anim.GetBool("HangL"));
stream.SendNext(anim.GetBool("HangR"));
stream.SendNext(anim.GetBool("CornerL"));
stream.SendNext(anim.GetBool("CornerR"));
stream.SendNext(anim.GetBool("ClimbShort"));
stream.SendNext(anim.GetBool("Top"));
stream.SendNext(anim.GetBool("ClimbDownShort"));
stream.SendNext(anim.GetBool("ClimbDown"));
stream.SendNext(anim.GetBool("Overhang"));
stream.SendNext(anim.GetBool("Sword"));
stream.SendNext(anim.GetBool("Bow"));
stream.SendNext(anim.GetBool("Pistol"));
stream.SendNext(anim.GetBool("Rifle"));
stream.SendNext(anim.GetBool("StandUp"));
stream.SendNext(anim.GetBool("Dance"));
stream.SendNext(anim.GetBool("Pull"));
stream.SendNext(anim.GetBool("Push"));
stream.SendNext(anim.GetBool("Throw"));
stream.SendNext(anim.GetBool("CanLand"));
stream.SendNext(anim.GetFloat("WaterLevel"));
stream.SendNext(transform.position);
stream.SendNext(transform.rotation);
stream.SendNext(this.myRigidbody.velocity);
}
else
{
//Network player, receive data
anim.SetFloat("AxisX", (float)stream.ReceiveNext());
anim.SetFloat("AxisY", (float)stream.ReceiveNext());
anim.SetBool("Jump", (bool)stream.ReceiveNext());
anim.SetBool("Grounded", (bool)stream.ReceiveNext());
anim.SetBool("Falling", (bool)stream.ReceiveNext());
anim.SetFloat("MouseX", (float)stream.ReceiveNext());
anim.SetBool("Attack1", (bool)stream.ReceiveNext());
anim.SetBool("Attack2", (bool)stream.ReceiveNext());
anim.SetBool("Evade_F", (bool)stream.ReceiveNext());
anim.SetBool("Evade_B", (bool)stream.ReceiveNext());
anim.SetBool("Evade_L", (bool)stream.ReceiveNext());
anim.SetBool("Evade_R", (bool)stream.ReceiveNext());
anim.SetBool("Sprinting", (bool)stream.ReceiveNext());
anim.SetBool("Walking", (bool)stream.ReceiveNext());
anim.SetBool("Sneaking", (bool)stream.ReceiveNext());
anim.SetBool("Balancing", (bool)stream.ReceiveNext());
anim.SetBool("WallRunL", (bool)stream.ReceiveNext());
anim.SetBool("WallRunR", (bool)stream.ReceiveNext());
anim.SetBool("WallRunUp", (bool)stream.ReceiveNext());
anim.SetBool("WallHigh", (bool)stream.ReceiveNext());
anim.SetBool("WallLow", (bool)stream.ReceiveNext());
anim.SetInteger ("RandomM", (int)stream.ReceiveNext());
anim.SetBool("Climb", (bool)stream.ReceiveNext());
anim.SetBool("HangL", (bool)stream.ReceiveNext());
anim.SetBool("HangR", (bool)stream.ReceiveNext());
anim.SetBool("CornerL", (bool)stream.ReceiveNext());
anim.SetBool("CornerR", (bool)stream.ReceiveNext());
anim.SetBool("ClimbShort", (bool)stream.ReceiveNext());
anim.SetBool("Top", (bool)stream.ReceiveNext());
anim.SetBool("ClimbDownShort", (bool)stream.ReceiveNext());
anim.SetBool("ClimbDown", (bool)stream.ReceiveNext());
anim.SetBool("Overhang", (bool)stream.ReceiveNext());
anim.SetBool("Sword", (bool)stream.ReceiveNext());
anim.SetBool("Bow", (bool)stream.ReceiveNext());
anim.SetBool("Pistol", (bool)stream.ReceiveNext());
anim.SetBool("Rifle", (bool)stream.ReceiveNext());
anim.SetBool("StandUp", (bool)stream.ReceiveNext());
anim.SetBool("Dance", (bool)stream.ReceiveNext());
anim.SetBool("Pull", (bool)stream.ReceiveNext());
anim.SetBool("Push", (bool)stream.ReceiveNext());
anim.SetBool("Throw", (bool)stream.ReceiveNext());
anim.SetBool("CanLand", (bool)stream.ReceiveNext());
anim.SetFloat("WaterLevel", (float)stream.ReceiveNext());
correctPlayerPos = (Vector3)stream.ReceiveNext();
correctPlayerRot = (Quaternion)stream.ReceiveNext();
correctPlayerVel = (Vector3)stream.ReceiveNext();
// avoids lerping the character from "center" to the "current" position when this client joins
if (firstTake)
{
firstTake = false;
this.transform.position = correctPlayerPos;
transform.rotation = correctPlayerRot;
}
}
}
void Update()
{
if (!photonView.isMine)
{
//Update remote player (smooth this, this looks good, at the cost of some accuracy)
this.myRigidbody.velocity = Vector3.Lerp(this.myRigidbody.velocity, correctPlayerVel, Time.deltaTime * 5);
transform.position = Vector3.Lerp(transform.position, correctPlayerPos, Time.deltaTime * 5);
transform.rotation = Quaternion.Lerp(transform.rotation, correctPlayerRot, Time.deltaTime * 5);
}
}
}
"stream.SendNext контроллер???"