I want to make a damage indicator for my online game, but there is an error in my code, can you check it?
Script 1
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class di_system : MonoBehaviour
{
[Header("References")]
[SerializeField] private DamageIndicator indicatorPrefab = null;
[SerializeField] private RectTransform holder = null;
[SerializeField] private Camera camera = null;
[SerializeField] private Transform player = null;
private Dictionary<Transform, DamageIndicator> Indicators = new Dictionary<Transform, DamageIndicator>();
#region Delegates
public static Action<Transform> CreateIndicator = delegate { };
public static Func<Transform, bool> CheckIfObjectInSight = null;
#endregion
private void OnEnable()
{
CreateIndicator += Create;
CheckIfObjectInSight += InSight;
}
private void OnDisable()
{
CreateIndicator -= Create;
CheckIfObjectInSight -= InSight;
}
void Create(Transform target)
{
if (Indicators.ContainsKey(target))
{
Indicators[target].Restart();
return;
}
DamageIndicator newIndicator = Instantiate(indicatorPrefab, holder);
newIndicator.Register(target, player, new Action(() => { Indicators.Remove(target); }));
Indicators.Add(target, newIndicator);
}
bool InSight(Transform t)
{
Vector3 screenPoint = camera.WorldToViewportPoint(t.position);
return screenPoint.z > 0 && screenPoint.x > 0 && screenPoint.x < 1 && screenPoint.y > 0 && screenPoint.y < 1;
}
}
Script 2
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Photon.Pun;
public class Health : MonoBehaviour
{
public float health;
public float maxHealth;
public float HealSpeed;
public Image healthBar;
float lerpSpeed;
public bool heal;
public PhotonView PV;
public Manager manager;
public bool dead;
public bool spawnShield;
public float spawnShieldTime;
public float SST;
public GameObject SSUI;
public GameObject SSUI2;
public Text healthText;
// Start is called before the first frame update
void Start()
{
manager = GameObject.FindWithTag("Scripts").GetComponent<Manager>();
spawnShield = true;
SST = spawnShieldTime;
}
// Update is called once per frame
void Update()
{
healthText.text = health.ToString("0");
if (Input.anyKey && spawnShield)
{
StartCoroutine(waitt());
}
if (spawnShield)
{
health = maxHealth;
SST -= 1f * Time.deltaTime;
SSUI.SetActive(true);
SSUI2.SetActive(true);
SSUI2.GetComponent<Text>().text = SST.ToString("0.0");
}
else
{
SSUI.SetActive(false);
SSUI2.SetActive(false);
}
if (SST <= 0)
{
PV.RPC("SpawnShieldOff", RpcTarget.All);
}
}
[PunRPC]
public void Damage(float damage)
{
Register();
health -= damage;
if (PV.IsMine)
{
if (health <= 0)
{
Die();
}
}
if (health <= 0)
{
dead = true;
}
}
public void Die()
{
manager.deaths++;
manager.cooldown();
manager.Alive = false;
PhotonNetwork.Destroy(gameObject);
}
[PunRPC]
public void SpawnShieldOff()
{
spawnShield = false;
}
void Register()
{
if (!di_system.CheckIfObjectInSight(this.transform))
{
di_system.CreateIndicator(this.transform);
}
}
}
I want to make damage indicators for my multiplayer game. Can you help me?
I've been trying to solve this problem for a long time but I couldn't find anything.
No errors in the code, but it shows the rotation of the damaged player instead of the rotation of the damaging player