- Home /
Network - Sync Projectile
Hello,
I have a cube that fires a sphere upward, and then onto a target that the player has aimed at. I'm slowly understanding the foundations of building a networked game (mines LAN).
Anyway, this projectile gets fired by the player:
function Update(){
if(networkView.isMine){
//Initiate empty missile marker of where player is aiming on map
var marker = Network.Instantiate(missileMarker, hitMarker.transform.position, hitMarker.transform.rotation, 0);
//Grab the network view of the missile marker
var markerID = marker.gameObject.GetComponent(NetworkView).viewID;
networkView.RPC("FireMissile", RPCMode.All, firedFromID, markerID);
}
}
The firedFromID is just the networkView.viewID attached to the player.
@RPC
function FireMissile(FromViewID : NetworkViewID, ToViewID : NetworkViewID){
var firedFrom = NetworkView.Find(FromViewID).transform;
var firedAt = NetworkView.Find(ToViewID).transform;
var missile = Instantiate(missilePrefab, missileSlots.position, missileSlots.rotation);
missile.gameObject.GetComponent(Missile).target = firedAt;
missile.gameObject.GetComponent(Missile).firedFrom = FromViewID;
}
For some reason, this works on a hit and miss bases. The behaviour is odd mainly on the player whose firing the missiles (instead of the clients viewing it).
For example, if I fire a missile, and then 0.5 seconds later, I fire another one, the first missile will move into the 2nd missiles position, and bounce between these two positions (sometimes anyway). Another issue is that a missile might change its rotation (so its flying sideways) for a few seconds before getting back onto course.
Whats weird though, is that they are Instantiated locally, and flying to a target. So sync shouldn't be an issue. On the missile itself, I have this script:
function Update(){
if(target && canFace){
var lookPos = target.transform.position - transform.position;
var rotation = Quaternion.LookRotation(lookPos);
transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * damping);
}
transform.Translate(Vector3.forward * speed * Time.deltaTime);
}
But again, this is being read locally:
Player fires missile.
Missile is Remote called to instantiate from given location.
Missile is now in local, flying towards target that was network instantiated.
What am I missing here?
Am I better using a Network.Instantiate for the missile? Or run it remotely?
Your answer
Follow this Question
Related Questions
Syncing Random vars for NPCs 0 Answers
How to avoid spawn delay on client? 0 Answers
What is the easiest way to set up a LAN-game? 0 Answers
Multiplayer objects isn't equals. 1 Answer
Emit particles for all clients 1 Answer