x


Prints correct on console but not updating on Prefab/Gameobject.

Hello,

I have a prefab which I am using in the game as the enemy. Now - I have a variable attach to that which transforms when it gets a hit. This variable is accessed by an empty gameobject which is responsible to display it using OnGUI() function.

Code:

var r_enepos : float;
var e_dis : float;
var e_distance : float;
function OnCollisionEnter(hit : Collision)
{
   randomrange();
   if(hit.gameObject.tag == "cannonball")
   {
     transform.position = Vector3(r_enepos,2,0);
   }
}
function Update()
{
    e_distance = gameObject.transform.position.x + 21; 
    Debug.Log("enemy distance" + e_distance);
    if(gameObject.transform.position.z!=0)
    gameObject.transform.position.z=0;
}


function randomrange()
{
    if(Random.Range(0,10)<7)
    r_enepos =  Random.Range(-18,10);
    else
    r_enepos = Random.Range(10,21);
}    

Code Explanation:

If you have to look into the code, e_distance is the variable which is inherited in another emptygameobject in the OnGUI() function.

GameObjects:

This script is attached to the "enemy" prefab and that prefab is drag onto the empty gameobject which is referencing this script. To be clear again one is a Prefab and other is an gameobject on the scene view.

Problem:

As you might see on the code, I make an attempt to print it on the screen. When I run the level, the value that prints on the console is accurate but on the GUI , it is just zero (which is the initial value). Moreover when I did trace a bit - I happen to find that the variable e_distance on the inspecter pane of "enemy" prefab remains zero. i.e. the value in the prefab does not change.

Request:

I am not sure where I have went wrong. I would be happy and would appreciate if someone could help me on this.

THANK YOU in advance.

more ▼

asked Dec 09 '11 at 05:26 AM

Karsnen gravatar image

Karsnen
736 26 45 54

(comments are locked)
10|3000 characters needed characters left

2 answers: sort voted first

just Instantiate another variable of type gameobject. for eg:-

var enemy: GameObject;  //(can be declared as an array, if you want)

then Instantiate the prefab to it.

enemy = Instantiate (yourPrefabName, vector(0,0,0), Quaternion. Identity);

now, you can acces the variable from these game objects.

enemy.GetComponent(yourCodename).yourVariable;

I hope you have got this answer long before, but I am writing this down coz the anyone with same problem is supposed to end here. Syclamoth has given the answer but a beginner like me took a lot of time to grasp what he said. So I am answering here even though its late.

more ▼

answered Mar 20 '12 at 02:42 PM

ArunChnadran gravatar image

ArunChnadran
63 3 6 9

(comments are locked)
10|3000 characters needed characters left

The problem is that while the enemy instance changes, the value in the prefab does not. In fact, the prefab doesn't even execute 'Update', so you're getting the GUI value out of one object, and the Debug.Log value from a totally different object which doesn't even know about the prefab it was instantiated from.

Basically, when you instantiate the prefab (in the usual way), you need to pass a reference to the instance that was created to the GUI object that keeps track of it. The prefab never moves, because it is a 'virtual' object that can't act on the game world without first being instantiated, but on the other hand can never be modified or destroyed (and so is sure to be a predictable starting point for other objects). Think about it the same way you would the relationship between a class and an object of that class.

more ▼

answered Dec 09 '11 at 07:00 AM

syclamoth gravatar image

syclamoth
14.8k 7 15 80

So Am i supposed to pass a reference of the Instantiated prefab?

Hmmmm.

Dec 09 '11 at 07:05 AM Karsnen

Could you please help me with some code? I can't figure it out.

Dec 09 '11 at 07:50 AM Karsnen

I have the same problem I couldn't find a answer yet... I don't get why people knows how to solve the problem, but doesn't help with the code... I see this happenning all the time overhere... sad...

May 27 '12 at 03:59 PM RodrigoLins
(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x5060
x3446
x2077
x1253

asked: Dec 09 '11 at 05:26 AM

Seen: 684 times

Last Updated: May 27 '12 at 03:59 PM