- Home /
how to access parent script from child object with overlapsphere in a multiplayer game
Hello! I have a problem when I'm trying to access a parent script when another gameobject is colliding with the child of the first gameobject. Let me explain this in detail:
This is an online game. The first player has a script attached called DemonSpells and I'm using OverlapSphere to find all the colliders it hits. This is a part of the script:
void Spell1_Damage(Vector3 center, float radius,string originatorName)
{
Collider[] hitColliders = Physics.OverlapSphere(center, radius);
int i = 0;
while (i < hitColliders.Length)
{
if(iAmOnTheRedTeam && hitColliders[i].transform.tag == "BlueTeamTrigger"){
Debug.Log(hitColliders[i].transform.root);
hitColliders[i].transform.SendMessageUpwards("Stun");
PlayerStats plstats = spawn.redspawn.GetComponent<PlayerStats>();
HealthAndDamage HDScript = hitColliders[i].transform.GetComponent<HealthAndDamage>();
HDScript.spellDamage = plstats.stats[2];
HDScript.iWasJustAttacked = true;
HDScript.myAttacker = originatorName;
HDScript.hitBySpell1 = true;
}
if(iAmOnTheBlueTeam && hitColliders[i].transform.tag == "RedTeamTrigger"){
Debug.Log(hitColliders[i].transform.root);
hitColliders[i].transform.SendMessageUpwards("Stun");
PlayerStats plstats = spawn.bluespawn.GetComponent<PlayerStats>();
HealthAndDamage HDScript = hitColliders[i].transform.GetComponent<HealthAndDamage>();
HDScript.spellDamage = plstats.stats[2];
HDScript.iWasJustAttacked = true;
HDScript.myAttacker = originatorName;
HDScript.hitBySpell1 = true;
}
i++;
}
}
This code finds the targets and accesses the child of the opponent named Trigger, which holds a script called HealthAndDamage. The player doesn't have any box collider, only the child (Trigger). I can access the Trigger gameobject and apply damage to the opponent but i can't access the parent. I need to access the Movement script from the parent so that I can apply a stun effect. I used SendMessageUpwards and it doesn't work. I also tried to access the parent like this: PointAndClickMovement move = hitColliders[i].transform.parent.gameobject.GetComponent();
This is the method from the PointAndClickMovement script I'm trying to get:
public void Stun()
{
Debug.Log("STUN");
previousSpeed = speed;
speed = 0;
networkView.RPC("UpdateMySpeed", RPCMode.AllBuffered, speed);
StartCoroutine(waitForStun(5));
}
IEnumerator waitForStun(float time)
{
yield return new WaitForSeconds (time);
speed = previousSpeed;
networkView.RPC("UpdateMySpeed", RPCMode.AllBuffered, speed);
}
I've tried every possible way to do this but with no luck. I also did this with a Raycast and it worked. But this kind of spell is an AOE(area of effect) and I can't do it with Raycast. Please let me know if I'm doing anything wrong! Thanks! :)
Your answer
Follow this Question
Related Questions
[Solved] Detecting objects with OverlapSphere within the frame they are created? 1 Answer
How to check if 2 collisions are on the same objects ? (is player on the same ground than enemy?) 2 Answers
physics.overlapshere not working as expected with objects being placed at random 2 Answers
Detect collider collision ,identify and access colliding colliders 0 Answers
AI help (C) 0 Answers