Question by
xE150D · Jan 31, 2018 at 07:17 PM ·
2dunity multiplayer
UNET 2D - changing localscale to x = -1 for flipping character Synchronization?
Hello!
i am working on a game in which the character flips when the changes the side of the character , because its weapon is facing the mouse. On my host this works fine but i noticed NetworkTransform is not synchronizing the localScale automatically and since im really new to UNET I could need some help at this point.
I am searching for a while now but I just cant get it to work, so i provide you my code which works so far.
This is my whole PlayerController: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking;
public class PlayerController : NetworkBehaviour {
public GameObject Bullet;
public Transform bulletSpawn;
public Transform Weapon;
Rigidbody2D rb2d;
public bool isGrounded;
public bool FlipDirection;
public int jumped;
public int classicJump = 400;
Vector3 dir;
public Vector3 mousePos;
// Use this for initialization
void Start () {
rb2d = GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update () {
if (!isLocalPlayer)
{
return;
}
else
{
//Weapon Rotation
if(FlipDirection)
{
dir = Camera.main.WorldToScreenPoint(transform.position) - Input.mousePosition;
} else
{
dir = Input.mousePosition - Camera.main.WorldToScreenPoint(transform.position);
}
float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
Weapon.rotation = Quaternion.AngleAxis(angle, Vector3.forward);
//Flip
if(FlipDirection & transform.localScale.x > 0)
{
transform.localScale = new Vector2(-transform.localScale.x, transform.localScale.y);
FlipDirection = false;
} else if(!FlipDirection & transform.localScale.x < 0)
{
transform.localScale = new Vector2(-transform.localScale.x, transform.localScale.y);
FlipDirection = true;
}
//Need to Flip?. Where is MousePos:
mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
if (transform.position.x < mousePos.x)
{
FlipDirection = false;
} else
{
FlipDirection = true;
}
//Shoot
if (Input.GetMouseButtonDown(0))
{
var direction = (dir - Weapon.transform.position).normalized;
if(FlipDirection)
{
CmdFire(-direction);
} else
{
CmdFire(direction);
}
}
//Controlls
if (Input.GetKeyDown("space"))
{
Jump(classicJump);
}
else if (Input.GetKey("a"))
{
gameObject.GetComponent<Rigidbody2D>().AddForce(new Vector2(1, 0) * -15);
}
else if(Input.GetKey("s"))
{
gameObject.GetComponent<Rigidbody2D>().AddForce(new Vector2(0, 1) * -15);
}
else if(Input.GetKey("d"))
{
gameObject.GetComponent<Rigidbody2D>().AddForce(new Vector2(1, 0) * 15);
}
else
{
//Braking
rb2d.velocity = new Vector2(rb2d.velocity.x * 0.99f, rb2d.velocity.y);
}
}
}
public override void OnStartLocalPlayer()
{
GetComponent<SpriteRenderer>().color = Color.white;
Camera.main.GetComponent<CameraFollow>().setTarget(gameObject.transform);
}
void Jump(int jumpForce)
{
if(isGrounded == true)
{
gameObject.GetComponent<Rigidbody2D>().AddForce(new Vector2(0, 1) * jumpForce);
} else if(jumped < 1)
{
gameObject.GetComponent<Rigidbody2D>().AddForce(new Vector2(0, 1) * jumpForce);
jumped += 1;
}
}
[Command]
void CmdFire(Vector3 direction)
{
var bullet = Instantiate(Bullet, bulletSpawn.position, Weapon.transform.rotation);
bullet.GetComponent<Rigidbody2D>().AddForce(direction * 900);
NetworkServer.Spawn(bullet);
Destroy(bullet, 4);
}
}
Comment
Your answer