Итак , я работаю над простеньким
Шутером , и я хочу сделать систему убийств , объясню как это должно работать : Когда один игрок убивает другого игрока то появляется надпись типа
UI а именно
UI TEXT , строка должна быть примерно такой :
Killer + "killed" + KilledPlayer
Я уже пытался это делать , у меня получилось вывести текст , и всё работало как мне нужно , но только в консоль , когда я пытался вывести тот же самый текст только на UI а именно методом поиска по тегу , что-то по типу этого :
GameObject.FindGameObjectWithTag("MyText").GetComponent<Text>().text = Killer + "kill" + KilledPlayer
Но в итоге получалось не то что мне нужно , на сервере показывает вроде бы то что нужно а на клиенте только ник убитого.
Подробнее можете посмотреть ниже .
В моём скрипте вы можете посмотреть что я делал :
PlayerShooting :using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
public class PlayerShooting : NetworkBehaviour {
public int Damage = 25;
public Camera cameraTR;
private RaycastHit hit;
private Ray ray;
void Update ()
{
if (Input.GetKeyDown (KeyCode.Mouse0))
{
Shoot();
}
}
void Shoot()
{
ray = cameraTR.ScreenPointToRay (Input.mousePosition);
if (Physics.Raycast (ray, out hit, 1000))
{
if(hit.transform.tag == "Player")
{
string id = hit.transform.name;
CmdShoot(id, Damage);
}
}
}
[Command]
void CmdShoot(string Id, int dmg)
{
GameObject go = GameObject.Find (Id);
go.GetComponent<PlayerSetup>().Killer = gameObject.name;
go.GetComponent<PlayerInfo> ().GetDamage (dmg);
}
}
PlayerInfo :using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
public class PlayerInfo : NetworkBehaviour
{
[SyncVar] public int Health = 100;
// Use this for initialization
void Start ()
{
transform.name = "Player " + GetComponent<NetworkIdentity> ().netId.ToString ();
}
void Update()
{
if (Health <= 0)
{
GetComponent<PlayerSetup>().DisablePlayer();
}
}
public void GetDamage(int dmg)
{
Health -= dmg;
}
void OnGUI()
{
if (isLocalPlayer)
{
GUI.Label(new Rect(Screen.width-100,25,200,50),"Health: "+Health);
}
}
}
PlayerSetup :using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
public class PlayerSetup : NetworkBehaviour {
public Camera CharacterCamera;
public AudioListener CharacterAudioListner;
public Transform hand1;
public Transform hand2;
public Transform clientModel;
private bool CanResp;
private float timer;
public float RespawnTime;
public string Killer;
void Start()
{
EnablePlayer ();
}
void EnablePlayer()
{
if (isLocalPlayer)
{
GetComponent<CharacterController> ().enabled = true;
GetComponent<UnityStandardAssets.Characters.FirstPerson.FirstPersonController> ().enabled = true;
CharacterCamera.enabled = true;
CharacterAudioListner.enabled = true;
hand1.GetComponent<MeshRenderer> ().enabled = true;
hand2.GetComponent<MeshRenderer> ().enabled = true;
GetComponent<PlayerShooting>().enabled = true;
}
else
{
clientModel.gameObject.SetActive(true);
}
CanResp = false;
GetComponent<PlayerInfo> ().Health = 100;
transform.position = new Vector3 (0, 1.5f, 0);
}
public void DisablePlayer()
{
Debug.Log(Killer +" kill " + gameObject.name);
GetComponent<CharacterController> ().enabled = false;
GetComponent<UnityStandardAssets.Characters.FirstPerson.FirstPersonController> ().enabled = false;
CharacterCamera.enabled = false;
CharacterAudioListner.enabled = false;
hand1.GetComponent<MeshRenderer> ().enabled = false;
hand2.GetComponent<MeshRenderer> ().enabled = false;
GetComponent<PlayerShooting>().enabled = false;
clientModel.gameObject.SetActive(false);
CanResp = true;
}
void Update()
{
if (CanResp)
{
timer+=Time.deltaTime;
if(timer>RespawnTime)
{
timer = 0;
EnablePlayer();
}
}
}
}
Жду на ответы !