- Home /
 
Network Sync Bullet 2D
I want to create a multiplayer SpaceShooter2D, but I have a problem, the client's bullet direction works in funtion of the mouse position of the host. On the bullet, the network transform and identity is attached, there is a empty where a network manager and HUD is attached and inside "Spawnable Prefabs" there is the bullet Prefab, please help me :
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;
 // Use this for initialization
 void Start()
 {
 }
 // Update is called once per frame
 void Update()
 {
    
     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();
     }
 }
 [Command]
 void CmdFire()
 {
     if (Time.time > nextFire)
     {
         Vector2 target = Camera.main.ScreenToWorldPoint(new Vector2(Input.mousePosition.x, Input.mousePosition.y));
         Vector2 bulletSpawner = new Vector2(bulletSpawn.transform.position.x, bulletSpawn.transform.position.y);
         Vector2 direction = target - bulletSpawner;
         direction.Normalize();
         nextFire = Time.time + fireRate;
         var bullet = (GameObject)Instantiate(bulletPrefab, bulletSpawn.transform.position, bulletSpawn.rotation);
         // GameObject bullet = (GameObject)Instantiate(bulletPrefab, bulletSpawner, rotation);
         rb = bullet.GetComponent<Rigidbody2D>();
         rb.AddForce(direction * speed);
          NetworkServer.Spawn(bullet);
         Destroy(bullet, TimeBullet);
     }
 }
 
               public override void OnStartLocalPlayer() { GetComponent().material.color = Color.blue; } }
Your answer