Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Script que funcione sin estar sujeta a ningún GameObject

Iniciado por Ivan dario, Abril 22, 2018, 03:32:34 AM

Tema anterior - Siguiente tema
Abril 22, 2018, 03:32:34 AM Ultima modificación: Abril 22, 2018, 11:18:21 PM por BAMF
Hola . alguien me podría decir como hago para que funcione esta script sin que este sujeta a ningun gameObject ? la idea es que esa script se descargara de internet directamente a una carpeta del proyecto y despues que corra el codigo, o que despues de ser descargada se pueda llamar desde otra script
 
esta en clase ScriptableObject porque es lo unico que  creo que funcionaria pero parece que solo es para guardar datos o puede que este haciendo mal todo
 
ayuda plz 
 
---------------------------------------------------------------------------
 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class InstaladorUpdate : ScriptableObject {
 
    public bool PermisoInstalarUpdate = false;
 
    void Start ()
    {}
        
    void Update () {
        if (PermisoInstalarUpdate = true)
            Debug.Log ("¡ Por fin !");
 
    }
}

 
 

no entendí muy bien lo que pedís, me suena a que no está el concepto claro de lo que hace un script (de los monobehaviours, un guión, un papel en la obra si querés) vs un scriptableObject : un script NO relacionado a ningun gameObject, es decir, a ningun objeto que el motor entiende que vive en Runtime, es decir, que en teoría esto no tiene funcionalidad (aunque podés hacer que un SCO haga trabajo y no el monobehaviour), es más como un lugar donde poner cosas, hay muchas cosas de Unity que son scriptableObjects, generalmente usados como baseDe Datos, opciones, Editor, etc.
 
 
 
Cita de: Ivan dario date=1524360754alguien me podría decir como hago para que funcione esta script sin que este sujeta a ningun gameObject ?
   


Poniendola en un SCO, aunque el que "funcione" queda en el aire, no se que es lo que estás tratando de hacer.
 
 
 
Cita de: Ivan dario date=1524360754la idea es que esa script se descargara de internet directamente a una carpeta del proyecto y despues que corra el codigo, o que despues de ser descargada se pueda llamar desde otra script
   


¿qué significa el "despues de ser descargada se pueda llamar desde otra script" , descargada de donde?, vos podés llamar a un miembro o método de una clase de lo que sea (cualquier clase de cualquier tipo) siempre y cuando tengas su referencia.
 
Un SCO tiene sus mensajes OnDestroy, OnEnable, OnDisable, Awake.... así como un monobehaviour tienen los suyos Start Update LateUpdate etc... fijate los "Messages"
 
https://docs.unity3d.com/ScriptReference/ScriptableObject.html
 
la razón por la que "no funciona" es que Start y Update no existe en un SCO, solo en un monobehaviour. Bueno, no tan así, por ej en EditorWindow tenés un Update en los mensajes, fijate:
 
https://docs.unity3d.com/ScriptReference/EditorWindow.html
 
y es un scriptableObject, pero no es el mismo Update que el monobehaviour, este ocurre a otro ritmo.
 
 

Simplemente puedes ponerlo en la primera escena de tu juego, en un gameObject vacío (osea solo con el transform y con tu script) ya que el void update te mandara el mensaje que has echo en tu script en cada frame del juego.
 
Lo que quieres hacer es algo parecido a un sistema de actualización del juego? 

Cita de: Alex date=1524364788Simplemente puedes ponerlo en la primera escena de tu juego, en un gameObject vacío (osea solo con el transform y con tu script) ya que el void update te mandara el mensaje que has echo en tu script en cada frame del juego.
   
   
      Lo que quieres hacer es algo parecido a un sistema de actualización del juego? 
   


Es exactamente lo que busco hacer :D, gracias lo intentare ojala funcione 
 
Cita de: lightbug date=1524363452no entendí muy bien lo que pedís, me suena a que no está el concepto claro de lo que hace un script (de los monobehaviours, un guión, un papel en la obra si querés) vs un scriptableObject : un script NO relacionado a ningun gameObject, es decir, a ningun objeto que el motor entiende que vive en Runtime, es decir, que en teoría esto no tiene funcionalidad (aunque podés hacer que un SCO haga trabajo y no el monobehaviour), es más como un lugar donde poner cosas, hay muchas cosas de Unity que son scriptableObjects, generalmente usados como baseDe Datos, opciones, Editor, etc.
   


La idea es que el script cuando se descargue de un servidor, y cuando este completa en una carpeta del proyecto. se pueda ejecutar automaticamente y hacer lo que yo quiero que haga en este ejemplo es el debug.log 

Cita de: Ivan dario date=1524365056Es exactamente lo que busco hacer :D, gracias lo intentare ojala funcione 
   


Denada! recueda: por lo que sé, es que si un script que no esta añadido a un gameobject en la escena no funcionara ya que al momento de compilar tu juego para exportarlo unity busca todos los objetos que se usará y se requiere para el buen funcionamiento de tu juego, y si ese script no esta siendo utilizado unity simplemente lo ignora y no lo une a los demás componentes que exportará. Si quieres conectar un scrip con otro puedes usar la función de GetComponent, en la documentación de unity te lo explica bien o en algunos videos de youtube
 
Saludos!

Cita de: Alex date=1524365812Denada! recueda: por lo que sé, es que si un script que no esta añadido a un gameobject en la escena no funcionara ya que al momento de compilar tu juego para exportarlo unity busca todos los objetos que se usará y se requiere para el buen funcionamiento de tu juego, y si ese script no esta siendo utilizado unity simplemente lo ignora y no lo une a los demás componentes que exportará. Si quieres conectar un scrip con otro puedes usar la función de GetComponent, en la documentación de unity te lo explica bien o en algunos videos de youtube
   
   
      Saludos!
   


Una ultima cosa . como hago para que desde una script pueda activar un gameobjet . es decir añadirlo a la escena
 
gracias de antemano :D
 

Cita de: Ivan dario date=1524425964Una ultima cosa . como hago para que desde una script pueda activar un gameobjet . es decir añadirlo a la escena
   


Para instanciarlo (ponerlo en escena) debés tener el asset (el prefab) en una carpeta llamada exactamente "Resources" o subcarpetas de estas "Resoruces/sub1/sub2" y desde el script:
 

GameObject elObjInstanciado = Instantiate( Resources.Load<GameObject>("sub1/sub2/elnombre") );   //"Resources" no se usa

 
fijate si lo puse bien, me parece que no tenés que hacer ningun cast pero por las dudas fijate.

Abril 23, 2018, 02:59:25 AM #7 Ultima modificación: Abril 23, 2018, 12:29:51 PM por pioj
Gracias :D me funciono
 



   
       
   
   
      pero para que el 
   
   

GameObject elObjInstanciado =

   
      si me funciono solo el
   
   

Instantiate( Resources.Load<GameObject>("sub1/sub2/elnombre") );

   
       
   

[/quote]

 

 
es necesario ? o me estoy perdiendo de algo ?

Cita de: Ivan dario date=1524445165Gracias :D me funciono
   
   
      pero para que el 
   
   

GameObject elObjInstanciado =

   
      si me funciono solo el
   
   

Instantiate( Resources.Load<GameObject>("sub1/sub2/elnombre") );

   
      es necesario ? o me estoy perdiendo de algo ?
   


Osea no compiló con el "GameObject = " ? Instantiate no recuerdo si retorno un UnityEngine.Object ? podés hacer un cast o agregregar "as GameObject" al final:
 

GameObject obj = (GameObject)Instantiate....
//o
GameObject obj = Instantiate.... as GameObject

 
el gameObject devuelto es solo la referencia al objeto por si querés hacer lo que quieras con él, si no la necesitas no es necesario agregarlo.
 
saludos

 
 
Cita de: lightbug date=1524454182el gameObject devuelto es solo la referencia al objeto por si querés hacer lo que quieras con él, si no la necesitas no es necesario agregarlo.
   
   
      saludos
   


Gracias por todo hombre :D me ayudaste bastante 
 
Saludos

Etiquetas: