- Home /
Question by
mattrick · Mar 09, 2014 at 08:08 AM ·
multiplayerremotechatcalls
Making A Chat System
Hi there! Basically what I am trying to do is make a multiplayer chat system using Remote Procedure Calls. My code doesn't seem to be adding the new line (updating that chat) at all. Here is my code: using UnityEngine; using System.Collections;
public class Player : MonoBehaviour
{
public float speed = 10f;
private float lastSynchronizationTime = 0f;
private float syncDelay = 0f;
private float syncTime = 0f;
private Vector3 syncStartPosition = Vector3.zero;
private Vector3 syncEndPosition = Vector3.zero;
private string str = null;
private string talk = null;
void OnSerializeNetworkView(BitStream stream, NetworkMessageInfo info)
{
Vector3 syncPosition = Vector3.zero;
Vector3 syncVelocity = Vector3.zero;
if (stream.isWriting)
{
syncPosition = rigidbody.position;
stream.Serialize(ref syncPosition);
syncPosition = rigidbody.velocity;
stream.Serialize(ref syncVelocity);
}
else
{
stream.Serialize(ref syncPosition);
stream.Serialize(ref syncVelocity);
syncTime = 0f;
syncDelay = Time.time - lastSynchronizationTime;
lastSynchronizationTime = Time.time;
syncEndPosition = syncPosition + syncVelocity * syncDelay;
syncStartPosition = rigidbody.position;
}
}
void Awake()
{
lastSynchronizationTime = Time.time;
str = "-=-=- Messages will appear here -=-=-\n";
talk = "Chat";
}
void Update()
{
if (networkView.isMine)
{
InputMovement();
InputColorChange();
}
else
{
SyncedMovement();
}
if (rigidbody.position.y < -10) {
str = str + "Someone fell out of the world.\n";
rigidbody.position = new Vector3(0,5,0);
}
}
private void InputMovement()
{
if (Input.GetKey(KeyCode.W))
rigidbody.MovePosition(rigidbody.position + Vector3.forward * speed * Time.deltaTime);
if (Input.GetKey(KeyCode.S))
rigidbody.MovePosition(rigidbody.position - Vector3.forward * speed * Time.deltaTime);
if (Input.GetKey(KeyCode.D))
rigidbody.MovePosition(rigidbody.position + Vector3.right * speed * Time.deltaTime);
if (Input.GetKey(KeyCode.A))
rigidbody.MovePosition(rigidbody.position - Vector3.right * speed * Time.deltaTime);
if (Input.GetKey(KeyCode.Space))
rigidbody.MovePosition(rigidbody.position + Vector3.up * 5f * Time.deltaTime);
}
private void SyncedMovement()
{
syncTime += Time.deltaTime;
rigidbody.position = Vector3.Lerp(syncStartPosition, syncEndPosition, syncTime / syncDelay);
}
private void InputColorChange()
{
if (Input.GetKeyDown(KeyCode.R))
ChangeColorTo(new Vector3(Random.Range(0f, 1f), Random.Range(0f, 1f), Random.Range(0f, 1f)));
}
[RPC] void ChangeColorTo(Vector3 color)
{
renderer.material.color = new Color(color.x, color.y, color.z, 1f);
if (networkView.isMine)
networkView.RPC("ChangeColorTo", RPCMode.OthersBuffered, color);
}
void OnGUI()
{
if (Event.current.type == EventType.KeyDown && Event.current.keyCode == KeyCode.Return) {
if (talk.Equals ("/cls")) {
str = "";
talk = "";
} else {
if (talk != null){
str = str + talk + "\n";
talk = "";
Chat (str);
}
}
}
if (networkView.isMine) {
GUILayout.Label (str);
talk = GUI.TextField (new Rect (500, 0, 400, 20), talk);
}
}
[RPC] void Chat(string msg){
str = msg;
if (networkView.isMine) {
networkView.RPC("Chat", RPCMode.OthersBuffered, msg);
}
}
}
Thanks for any help!
Comment