@AppingCS

Как сделать систему убийств?

Итак , я работаю над простеньким Шутером , и я хочу сделать систему убийств , объясню как это должно работать : Когда один игрок убивает другого игрока то появляется надпись типа 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();
                         }
                 }
         }
 }


Жду на ответы !
  • Вопрос задан
  • 118 просмотров
Пригласить эксперта
Ответы на вопрос 1
@youkerni
Unity3D developer
Не могу дать Вам ответ на Ваш вопрос, т.к. слабо разбираюсь в UNet..

Но могу дать Вам пару советов, а именно:
1) забыть про методы Find в GameObject
2) кешировать компоненты (особенно в Update)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы