- Home /
My energy bar decrease only on the host screen with network
Hi, I don't know why the energy decrease only on the host screen when I'm shooting, this is my script, it's at CmdFire(), energy.Current -= Amount5: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking;
public class PlayerController : NetworkBehaviour { //Move public float _speed; private bool _move = false; public GameObject _point; private Vector3 _target; //Shot public GameObject bulletPrefab; public Transform bulletSpawn; public float TimeBullet; private Rigidbody2D rb; public float speed; public float fireRate; private float nextFire; private bool shoot; private float Amount5 = 5; private bool Meshoot; //Bar [SerializeField] private Stat health; [SerializeField] private Stat energy;
private void Awake()
{
health.Initialize();
energy.Initialize();
}
void Start()
{
Meshoot = false;
StartCoroutine(DoEveryFiveSeconds());
if (isLocalPlayer)
{
transform.FindChild("Camera").GetComponent<Camera>().enabled = true;
transform.FindChild("Canvas").GetComponent<Canvas>().enabled = true;
}
}
IEnumerator DoEveryFiveSeconds()
{
while (true)
{
if(Meshoot == true)
{
yield return new WaitForSeconds(0.1f);
Energy1WhenShoot();
}
if(Meshoot == false)
{
yield return new WaitForSeconds(0.25f);
Energy1();
}
}
}
void Energy1()
{
energy.CurrentVal += 3;
}
void Energy1WhenShoot()
{
energy.CurrentVal += 1;
}
// Update is called once per frame
void Update()
{
if(Meshoot != true)
{
Meshoot = false;
}
if (energy.CurrentVal <= 0)
{
shoot = false;
}
if (energy.CurrentVal > 0)
{
shoot = true;
}
if (energy.CurrentVal - Amount5 < 0)
{
shoot = false;
}
if (!isLocalPlayer)
{
return;
}
Vector3 difference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
difference.Normalize();
float rotation_z = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0f, 0f, rotation_z);
if (Input.GetMouseButton(1))
{
_target = Camera.main.ScreenToWorldPoint(Input.mousePosition);
_target.z = transform.position.z;
if (_move == false)
_move = true;
Instantiate(_point, _target, Quaternion.identity);
{
if (Input.GetMouseButtonDown(1))
{
_move = false;
}
if (_move == true)
transform.position = Vector3.MoveTowards(transform.position, _target, _speed * Time.deltaTime);
}
}
if (Input.GetMouseButton(0))
{
CmdFire();
}
else
{
Meshoot = false;
}
}
[Command]
void CmdFire()
{
if (shoot == true)
{
if (Time.time > nextFire)
{
var bullet = (GameObject)Instantiate(
bulletPrefab,
bulletSpawn.position,
bulletSpawn.rotation);
energy.CurrentVal -= Amount5;
// Add velocity to the bullet
bullet.GetComponent<Rigidbody2D>().velocity = bullet.transform.up * (-speed);
nextFire = Time.time + fireRate;
NetworkServer.Spawn(bullet);
Destroy(bullet, TimeBullet);
Meshoot = true;
}
}
}
public override void OnStartLocalPlayer()
{
GetComponent<SpriteRenderer>().material.color = Color.blue;
}
public override void OnStartClient()
{
GetComponent<SpriteRenderer>().material.color = Color.red;
}
void OnTriggerEnter2D(Collider2D col)
{
if (col.gameObject.tag == "Bullet")
{
health.CurrentVal -= 10;
}
}
}
Your answer
Follow this Question
Related Questions
Network.Instantiate Problem 1 Answer
Instantiate prefab and passing parameter 1 Answer
How to update a script to a network script 1 Answer
How to use Network.Instantiate? 0 Answers