Não consigo desativar script de gameObject (C#)
5 participantes
Página 1 de 1
Não consigo desativar script de gameObject (C#)
Estou tentando desativar o componente (script) "Basic Input" do gameObject "Car" por outro script mas não consigo.
Procurei bastante na internet e o código ficou assim:
Mas o unity retorna o seguinte erro: "Assets\Scripts\Menu\MainMenu.cs(21,26): error CS0246: The type or namespace name 'BasicInput' could not be found (are you missing a using directive or an assembly reference?)"
O nome do script é "BasicInput" mas no inspector ele está "Basic Input" (com espaço) e o GameObject Car é inserido na cena por script também:
vlw
Procurei bastante na internet e o código ficou assim:
- Código:
Car.GetComponent<BasicInput>().enabled = false;
Mas o unity retorna o seguinte erro: "Assets\Scripts\Menu\MainMenu.cs(21,26): error CS0246: The type or namespace name 'BasicInput' could not be found (are you missing a using directive or an assembly reference?)"
O nome do script é "BasicInput" mas no inspector ele está "Basic Input" (com espaço) e o GameObject Car é inserido na cena por script também:
- Código:
Car = Instantiate(GameData.pCarObj, CarPos.transform.position, CarPos.transform.rotation);
vlw
wooZbr- Iniciante
- PONTOS : 1708
REPUTAÇÃO : 2
Respeito as regras :
Re: Não consigo desativar script de gameObject (C#)
O Car é um prefab?
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: Não consigo desativar script de gameObject (C#)
Sim, no caso a variável GameData.pCarObj se refere a um prefab.Pokedlg escreveu:O Car é um prefab?
wooZbr- Iniciante
- PONTOS : 1708
REPUTAÇÃO : 2
Respeito as regras :
Re: Não consigo desativar script de gameObject (C#)
Existe uma diferença entre o prefab e o objeto em cena, se voce colocar um script a um GameObject que está em cena, ele não irá automaticamente atribuir este script ao prefab Original. (Acredito que esse seja o seu problema), para resolver, vai no GameObject que tem o script "BasicInput" que está em cena, se ele for um prefab clique com o botao direito do mouse e vai em Unpack Prefab, depois arraste ele até algum lugar da aba project para poder transformar ele em um novo prefab e substitua o prefab original por esse, pois agora ele irá conter o script "BasicInput"
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: Não consigo desativar script de gameObject (C#)
No exemplo que fiz, voce verá que no começo o prefab original nao estava com o script, depois que criou um novo prefab com script, o prefab original teve o script.
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: Não consigo desativar script de gameObject (C#)
Então cara, acho que não é esse o problema porque o prefab dele já contém o script, e ele sequer está na cena antes de executar, é criado pelo script.Pokedlg escreveu:Existe uma diferença entre o prefab e o objeto em cena, se voce colocar um script a um GameObject que está em cena, ele não irá automaticamente atribuir este script ao prefab Original. (Acredito que esse seja o seu problema), para resolver, vai no GameObject que tem o script "BasicInput" que está em cena, se ele for um prefab clique com o botao direito do mouse e vai em Unpack Prefab, depois arraste ele até algum lugar da aba project para poder transformar ele em um novo prefab e substitua o prefab original por esse, pois agora ele irá conter o script "BasicInput"
wooZbr- Iniciante
- PONTOS : 1708
REPUTAÇÃO : 2
Respeito as regras :
Re: Não consigo desativar script de gameObject (C#)
Voce poderia mandar uma imagem do inspector do prefab?
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: Não consigo desativar script de gameObject (C#)
Ok, voce poderia entao mandar o script, para vermos se pode ser outra coisa?
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: Não consigo desativar script de gameObject (C#)
Pokedlg escreveu:Ok, voce poderia entao mandar o script, para vermos se pode ser outra coisa?
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class MainMenu : MonoBehaviour
{
public Transform FreeRoamLine;
public GameObject FreeRoam;
public GameObject CarPos;
public GameObject Car;
// Start is called before the first frame update
void Start()
{
FreeRoam = this.transform.Find("FreeRoam").gameObject;
FreeRoamLine = FreeRoam.transform.Find("Line");
CarPos = GameObject.Find("CarPos");
Car = Instantiate(GameData.pCarObj, CarPos.transform.position, CarPos.transform.rotation);
Car.name = "Car";
Car.GetComponent<BasicInput>().enabled = false;
}
// Update is called once per frame
void Update()
{
}
}
Print:
wooZbr- Iniciante
- PONTOS : 1708
REPUTAÇÃO : 2
Respeito as regras :
Re: Não consigo desativar script de gameObject (C#)
Isto está selecionada na aba Project ou na Hierarchy da unity?
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: Não consigo desativar script de gameObject (C#)
O que é o GameData.pCarObj ?
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: Não consigo desativar script de gameObject (C#)
Tenta instanciar o carro dizendo explicitamente que é um GameObject:
Acredito que também dê pra fazer assim:
- Código:
Car = Instantiate(GameData.pCarObj, CarPos.transform.position, CarPos.transform.rotation) as GameObject;
Acredito que também dê pra fazer assim:
- Código:
Car.gameObject.GetComponent<BasicInput>().enabled = false;
Micco- MembroAvançado
- PONTOS : 1790
REPUTAÇÃO : 17
Áreas de atuação : C#, GDScript, HTML e CSS.
Respeito as regras :
Re: Não consigo desativar script de gameObject (C#)
Tá na aba Project, e GameData.pCarObj é a variável do script GameData que armazena o GameObject do carro (pois tem mais de um)Pokedlg escreveu:Isto está selecionada na aba Project ou na Hierarchy da unity?
Uma parte do script dela:
- Código:
public static string pCar; //var do nome do carro
public static GameObject pCarObj; //var do gameobject (prefab) do carro
[...]
pCar = PlayerPrefs.GetString("pCar", "Pickup"); //pega o nome do carro salvo, se não tiver vai ser Pickup
pCarObj = Resources.Load(pCar) as GameObject; //carrega o gameobject do carro de acordo com o nome
@Micco Não deu certo também :\
wooZbr- Iniciante
- PONTOS : 1708
REPUTAÇÃO : 2
Respeito as regras :
Re: Não consigo desativar script de gameObject (C#)
Me desculpe, eu confundi os problemas. Agora me lembrei que já tinha passado por esse problema antes . (Talvez possa ser o que eu estou pensando), o estranho é que se fosse isso, o erro que apareceu no Console seria diferente. Acontece que voce está passando um GameObject para se tornar bool e nao teria como converter uma variavel do tipo Unity.GameObject em bool. Tente fazer o teste com esse script:
Se isto nao funcionar, tente deste jeito:
Acredito que o primeiro irá funcionar se o problema for o que eu estou pensando.
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class MainMenu : MonoBehaviour
{
public Transform FreeRoamLine;
public GameObject FreeRoam;
public GameObject CarPos;
public GameObject Car;
// Start is called before the first frame update
void Start()
{
FreeRoam = this.transform.Find("FreeRoam").gameObject;
FreeRoamLine = FreeRoam.transform.Find("Line");
CarPos = GameObject.Find("CarPos");
Car = Instantiate(GameData.pCarObj, CarPos.transform.position, CarPos.transform.rotation);
Car.name = "Car";
var scriptBasicInput = Car.GetComponent<BasicInput>();
scriptBasicInput.enabled = false;
}
// Update is called once per frame
void Update()
{
}
}
Se isto nao funcionar, tente deste jeito:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class MainMenu : MonoBehaviour
{
public Transform FreeRoamLine;
public BasicInput basicInput;
public GameObject FreeRoam;
public GameObject CarPos;
public GameObject Car;
// Start is called before the first frame update
void Start()
{
FreeRoam = this.transform.Find("FreeRoam").gameObject;
FreeRoamLine = FreeRoam.transform.Find("Line");
CarPos = GameObject.Find("CarPos");
Car = Instantiate(GameData.pCarObj, CarPos.transform.position, CarPos.transform.rotation);
Car.name = "Car";
basicInput = Car.GetComponent<BasicInput>();
basicInput.enabled = false;
}
// Update is called once per frame
void Update()
{
}
}
Acredito que o primeiro irá funcionar se o problema for o que eu estou pensando.
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: Não consigo desativar script de gameObject (C#)
Pokedlg escreveu:Me desculpe, eu confundi os problemas. Agora me lembrei que já tinha passado por esse problema antes . (Talvez possa ser o que eu estou pensando), o estranho é que se fosse isso, o erro que apareceu no Console seria diferente. Acontece que voce está passando um GameObject para se tornar bool e nao teria como converter uma variavel do tipo Unity.GameObject em bool. Tente fazer o teste com esse script:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class MainMenu : MonoBehaviour
{
public Transform FreeRoamLine;
public GameObject FreeRoam;
public GameObject CarPos;
public GameObject Car;
// Start is called before the first frame update
void Start()
{
FreeRoam = this.transform.Find("FreeRoam").gameObject;
FreeRoamLine = FreeRoam.transform.Find("Line");
CarPos = GameObject.Find("CarPos");
Car = Instantiate(GameData.pCarObj, CarPos.transform.position, CarPos.transform.rotation);
Car.name = "Car";
var scriptBasicInput = Car.GetComponent<BasicInput>();
scriptBasicInput.enabled = false;
}
// Update is called once per frame
void Update()
{
}
}
Se isto nao funcionar, tente deste jeito:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class MainMenu : MonoBehaviour
{
public Transform FreeRoamLine;
public BasicInput basicInput;
public GameObject FreeRoam;
public GameObject CarPos;
public GameObject Car;
// Start is called before the first frame update
void Start()
{
FreeRoam = this.transform.Find("FreeRoam").gameObject;
FreeRoamLine = FreeRoam.transform.Find("Line");
CarPos = GameObject.Find("CarPos");
Car = Instantiate(GameData.pCarObj, CarPos.transform.position, CarPos.transform.rotation);
Car.name = "Car";
basicInput = Car.GetComponent<BasicInput>();
basicInput.enabled = false;
}
// Update is called once per frame
void Update()
{
}
}
Acredito que o primeiro irá funcionar se o problema for o que eu estou pensando.
Continua o mesmo erro, mas no segundo script ele acusa erro na linha 9
wooZbr- Iniciante
- PONTOS : 1708
REPUTAÇÃO : 2
Respeito as regras :
Re: Não consigo desativar script de gameObject (C#)
Qual o erro que aparece?
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: Não consigo desativar script de gameObject (C#)
Assets\Scripts\Menu\MainMenu.cs(9,12): error CS0246: The type or namespace name 'BasicInput' could not be found (are you missing a using directive or an assembly reference?)Pokedlg escreveu:Qual o erro que aparece?
BTW eu tô achando que esse erro é porque o nome do script aparece com espaço ali no component dele. Tem algum jeito de colocar o nome com espaço no script?
wooZbr- Iniciante
- PONTOS : 1708
REPUTAÇÃO : 2
Respeito as regras :
Re: Não consigo desativar script de gameObject (C#)
creio que o problema não seja com espaço porque se vc colocar o nome do script com letra maiúscula por padrão a unity vai colocar espaço antes daquela letra maiúsculawooZbr escreveu:Assets\Scripts\Menu\MainMenu.cs(9,12): error CS0246: The type or namespace name 'BasicInput' could not be found (are you missing a using directive or an assembly reference?)Pokedlg escreveu:Qual o erro que aparece?
BTW eu tô achando que esse erro é porque o nome do script aparece com espaço ali no component dele. Tem algum jeito de colocar o nome com espaço no script?
Re: Não consigo desativar script de gameObject (C#)
Ja descobri o problema, o problema é no script GameData, nesta linha:
Quando voce transforma o GameObject pCarObj em static ele não irá ter mais um valor, voce terá que fazer assim:
No script GameData:
No script MainMenu:
Tente isso, acho que irá funcionar
- Código:
public static GameObject pCarObj;
Quando voce transforma o GameObject pCarObj em static ele não irá ter mais um valor, voce terá que fazer assim:
No script GameData:
- Código:
public static string pCar; //var do nome do carro
public GameObject pCarObj; //var do gameobject (prefab) do carro
[...]
pCar = PlayerPrefs.GetString("pCar", "Pickup"); //pega o nome do carro salvo, se não tiver vai ser Pickup
pCarObj = Resources.Load(pCar) as GameObject; //carrega o gameobject do carro de acordo com o nome
No script MainMenu:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class MainMenu : MonoBehaviour
{
public Transform FreeRoamLine;
public GameObject FreeRoam;
public GameData gameData; //voce terá que colocar o seu Script GameData aqui
public GameObject CarPos;
public GameObject Car;
// Start is called before the first frame update
void Start()
{
FreeRoam = this.transform.Find("FreeRoam").gameObject;
FreeRoamLine = FreeRoam.transform.Find("Line");
CarPos = GameObject.Find("CarPos");
Car = Instantiate(gameData.pCarObj, CarPos.transform.position, CarPos.transform.rotation);
Car.name = "Car";
Car.GetComponent<BasicInput>().enabled = false;
}
// Update is called once per frame
void Update()
{
}
}
Tente isso, acho que irá funcionar
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: Não consigo desativar script de gameObject (C#)
Pior que não, continua exatamente o mesmo erro.Pokedlg escreveu:Funcionou?
wooZbr- Iniciante
- PONTOS : 1708
REPUTAÇÃO : 2
Respeito as regras :
Re: Não consigo desativar script de gameObject (C#)
Amigo, cê não poderia criar uma variável no seu jogador "canMove" e controlar o comportamento dele por aí?
NKKF- ProgramadorMaster
- PONTOS : 4817
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Não consigo desativar script de gameObject (C#)
Posso mas eu não sei como controlar a movimentação sem desativar o script BasicInput, que são os controles do carro. Alias eu não consigo desativar nenhum script do carro mas se eu criar um collider, por exemplo, ele desativa normalmente.NKKF escreveu:Amigo, cê não poderia criar uma variável no seu jogador "canMove" e controlar o comportamento dele por aí?
wooZbr- Iniciante
- PONTOS : 1708
REPUTAÇÃO : 2
Respeito as regras :
Re: Não consigo desativar script de gameObject (C#)
Voce tem certeza que o Resources.Load está funcionando corretamente? tire o static do pCarObj e confere se ele está detectando o objeto.
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: Não consigo desativar script de gameObject (C#)
Tá sim, tanto que o carro aparece na cena direitinho.Pokedlg escreveu:Voce tem certeza que o Resources.Load está funcionando corretamente? tire o static do pCarObj e confere se ele está detectando o objeto.
Mas eu consegui driblar esse erro agora criando outro prefab do carro com o script de movimento desativado e spawnando ele.
Valeu pela ajuda!!
wooZbr- Iniciante
- PONTOS : 1708
REPUTAÇÃO : 2
Respeito as regras :
Re: Não consigo desativar script de gameObject (C#)
Fui fazer um menu de pause agora e percebi o que tinha de errado ai: O script BasicInput pertence a um namespace (RVP), então pra desativar ele é só fazer isso:
Ou seja, adicionar o nome do namespace antes do nome do componente. Antes eu nem sabia que isso existia kkk mas agora ta ai, resolvido xD
- Código:
Car.GetComponent<RVP.BasicInput>().enabled = true;
Ou seja, adicionar o nome do namespace antes do nome do componente. Antes eu nem sabia que isso existia kkk mas agora ta ai, resolvido xD
wooZbr- Iniciante
- PONTOS : 1708
REPUTAÇÃO : 2
Respeito as regras :
Tópicos semelhantes
» [RESOLVIDO] Não consigo ativar/desativar um script através de outro
» COMO DESATIVAR O SCRIPT "FisrtPersonController" DO PLAYER ATRAVÉS DE OUTRO SCRIPT
» Dificuldades em destruir ou desativar GameObject...
» Como ativar e desativar um gameObject com uma tecla
» Como desativar um gameobject atraves do seu objeto-filho?
» COMO DESATIVAR O SCRIPT "FisrtPersonController" DO PLAYER ATRAVÉS DE OUTRO SCRIPT
» Dificuldades em destruir ou desativar GameObject...
» Como ativar e desativar um gameObject com uma tecla
» Como desativar um gameobject atraves do seu objeto-filho?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos