- Home /
Bullets direction is not good (network)
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 :
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(); rb.AddForce(direction * speed); NetworkServer.Spawn(bullet); Destroy(bullet, TimeBullet); } }