- Home /
Why are all my player prefabs shooting lasers, instead of just one?
Hello All,
quick question about prefabs. I have a script that handles the players in my game, which shoot lasers... rainbow lasers for now, but thats besides the point. I have the script dropped onto the prefab, which I have a funny feeling is responsible for the issue im experiencing. The process is supposed to be only the selected player shoots lasers, but all of them are shooting with my current setup. Can anyone lend some insight into how to correctly approach this?
Notably, each player has a unique name (ex: RedPlayer, BluePlayer).
void Start(){
LineRenderer[] lineRenderers = gameObject.GetComponentsInChildren<LineRenderer>();
line = lineRenderers [0];
gunTip = GameObject.Find(playerObject.name + "RainbowGun/GunTip");
}
void Update(){
if(TileMap.selectedGameObject != null &&
Input.GetButtonDown("Fire1") ){
StopCoroutine("FireLazer");
StartCoroutine("FireLazer");
}
}
IEnumerator FireLazer(){
float lazerRange = 13;
line.enabled = true;
gunTip.SetActive (true);
while(Input.GetButton("Fire1")){
line.GetComponent<Renderer>().material.mainTextureOffset = new Vector2(0, Time.time);
Ray ray = new Ray(gunTip.transform.position, gunTip.transform.forward);
RaycastHit hit;
line.SetPosition(0 , ray.origin);
if(Physics.Raycast(ray, out hit, lazerRange))
line.SetPosition(1, hit.point);
else
line.SetPosition(1, ray.GetPoint(lazerRange));
yield return null;
}
line.enabled = false;
this.gunTip.SetActive (false);
}
Any and all help appreciated. Thanks in advance!
Answer by Bioinformatizer · Jul 06, 2015 at 12:19 AM
You can use tags to solve this problem, right now the script is equal to all the prefabs. You can tag one of your prefabs with the "player" tag, or create your own tag.
Then, in your update function add a line for: if (gameObject.CompareTag("Player")) before all the other stuff.
If only one of your prefabs is tagged with the player tag this should work just fine barring any other issues.
Answer by Meltdown · Jul 06, 2015 at 12:39 AM
You need to add logic into your update method to check if the script is on the current selected user ...
i.e
void Update(){
if(!isCurrentSelectedPlayer)
return;
if(TileMap.selectedGameObject != null &&
Input.GetButtonDown("Fire1") ){
StopCoroutine("FireLazer");
StartCoroutine("FireLazer");
}
}
So what this is doing is if the variable 'isCurrentSelectedPlayer' is false, it will return and not do anything, but if the value is true, it will continue to the code that fires the laser. You will obviously need to set the value for isCurrentSelectedPlayer when they are selected.
Your answer
Follow this Question
Related Questions
Client side Player prefab spawned by overriding GameManager return false for isLocalPlayer 0 Answers
MultiplayerManager and MenuManager error.Help me.Thanks 0 Answers
How to use functions in a script associated with a prefab? 1 Answer
Unity Master server:what to do next? 1 Answer
zombie prefab 1 Answer