Due to a broken fiber optic line my internet is not loading some sites.... mainly this, google and youtube.... all else is a blackout. From the resources i can access, i am stuck. Any help would be super awesome
Been trying to access an instantiated scenes resource script (or at least the information inside the resource) from within my global script.
I have tried using the id and the path but am doing this incorrectly or perhaps it just doesn't work???
How would i go about using the path to load up the respective scenes resource container or transfer its info. Can i load the resource in my global script and dynamically have those values adjusted via the global script?
Currently my instantiated object script is setting a path variable in my global script when clicked. I want to load that scenes information globally, and get/set them in a "controller" scene meant for specifically manipulating the values.
Thanks for the time folks, really means a lot!
How to access a nodes properties dynamically (code reference)
i have a Scene with an attached individual resource, "data". I instantiate the scene each time i press a button from inside my "Main" scene. I want to click that scene i created in run time/load, and have the attached "data" accessed in my global script of that specific selected node. Be able to change that data, Then have that change overwritten in my original "data" attached to the specific scene. I could just set all the global variables to be what that's nodes data is.... but i was hoping a better way to parse the node globally for its attached resource value(s).
As always you are the MAN!
i created a resource script in filesystem.
DATA.gd #working
I then have another scene that used that resource as an :
@export var data : Resource = DATA.new() #working
In my "Main" scene....
var scene = preload("blahblah") #working
when a button is clicked....:
var new = scene.instantiate() #working
add_child(new)
I want to click on the instanced node.... and have its properties available in my global script without setting each one inside the node when clicked. which is what i currently was doing.... but the whole reason to use a resource is to be able to add to the project with ease and not being broken if i forget to set something. Like i said i may be missing the "way" to do this and reading the docs has gotten me even more confused.
My project is a test of stuff.... built on a test of stuff.... and without explaining what all the lost features are, it is impossible to navigate intuitively.
If i am just not explaining myself properly i will try to clean up what i have and post an example.
I was just hoping my ignorance/aptitude was to blame and simple do "abc" by XYZ may get me out of the proverbial woods.
- Edited
REVBENT Do new.data
. The variable new
is a reference to the node that contains the property data
. Upon instantiation, pass this reference to anyone who needs to access data
.
Btw you should avoid using the word new
to name your variables. It's a name of a built in method in Object class from which all other classes are inherited.
what if i have multiple of the same instance? but want that data to be individual?
Say i press the button 3 times, but want one red, one blue, etc, save/load, and maintain data integrity to the specific node.
Am i just trying to do too much, too easily?
- Edited
REVBENT Here's a simple example to play with:
Resource class:
class_name Data extends Resource
var foo = 1
Instantiated scene class (scene.gd):
extends Node
@export var data = Data.new()
Script that does scene instantiation:
extends Node
func _ready():
var s1 = load("res://scene.tscn").instantiate()
var s2 = load("res://scene.tscn").instantiate()
print(s1.data)
print(s2.data)
You should get a printout of two different Data resource objects:
<Resource#-9223372008316730102>
<Resource#-9223372008132180722>
In the case you don't do Data.new()
in the scene script, but instead you create and assign a Data
object in the editor (to an exported property) that resource will be shared between all scene instances.
However if you enable resource_local_to_scene
flag for that resource, the engine will automatically duplicate it when instantiating the scene.
ok i will try to figure this out, i am struggling to visualize this. Maybe some coffee and a break will help it sink in.
Thanks for the heads up too with naming conventions. I actually do use a better naming scheme for everything, but just for example sake i typed that stuff.
In my global script how should i reference the created node? I was sending the "self", the getnode(self), getnodepath(self)... as a NodePath in my global script.
I would then try to say in process:
if Input.action....(Leftmouse):
var scene = <path of node i was sending>.data
scene.Name = globalname
.....and the above was not working.... so i think i was trying to access the property properly potentially (see what i did there )....
what i think i am doing wrong is referencing that specific node (created at run time) in the script.
seriously thanks for taking your time. i know we all got shtuff to do!
how do i load the:
<Resource#-9223372008132180722>
in the global script.....
i can get my node to reference that and send it. i think i already did.
so in the global i want to load that resource from reference at runtime, without declaring the variables in _ready()... because the number will change depending how many objects i instantiate or delete.... as in i wont know "S1" to "Sx) at run time/change with load data
or do i say something like:
var object = <Resource#-9223372008132180722>
object.Name = globalName
yes.... autoload. I figured i was safest to use that to hold the information and have a separate window to change data... with the singleton acting as the "middleman"
BTW... i have read you explaining instantiate stuff (maybe the above example???)... as well as many other posts. I really do try to source other places/archives best i can.
With that said...
You put some serious time into this site. Its highly impressive and very appreciated.
I know i say this a lot... but i feel it should be.... THANK YOU!
The object scene itself is setting a global variable when Input to its <id/path/self>.
In the autoload i have an export var for <path/id/self>.
I am trying to create a global func to set a value (data) in another scene (controller scene) that changes the values of the "data"
The global script have separate set of variables to be set to what the new_data.
If the player chooses to keep "new_data" it will save the changes to objects "data"...
If the player chooses to discard i wont have touched the original data.
I was thinking to have more types of controllers or objects eventually and or access them between scenes.
I think that is how i need to structure handling data that's created/edited at run time???