【问题标题】:How to activate a script on an object from a script in another object?如何从另一个对象中的脚本激活对象上的脚本?
【发布时间】:2019-02-28 15:38:04
【问题描述】:

我正在制作一款赛车游戏,但在倒计时结束前禁用控件时遇到了问题。倒计时脚本的结尾是:

CountDownNumber.SetActive(false);
CountDownNumber.GetComponent<Text>().text = "GO!";
countdownAudio.Play(); //Change to Go Audio
CountDownNumber.SetActive(true);

当这部分运行时,我希望启用汽车对象中的脚本。我尝试过的方法是使用以下行:

usercontrol.GetComponent(CarController).enabled = true;

usercontrol.GetComponent<CarController>().enabled = true;

两者都不成功,因为错误消息是:

Assets/CountDown.cs(41,34):错误 CS0103:当前上下文中不存在名称“CarController”

但这是我要启用的 GameObject 中脚本的名称。

关于如何解决此问题的任何想法?

如果有帮助,汽车来自标准资产,因此我想在旅途中启用汽车控制器脚本。

【问题讨论】:

  • 您可能需要添加 using 语句,以便 C# 编译器知道您指的是哪个 CarController。
  • 您可以尝试使用此Component[] comp = usercontrol.GetComponents(typeof(Component)) 访问所有组件并通过打印数组元素来检查CarController 是否是其中之一?
  • 确保脚本和类都被称为CarController,拼写完全相同
  • @AliKanat 问题不在于组件是否在对象上,而是在编译时无法识别类型CarController
  • 如果您仅在 VisualStudio 中遇到此问题,我可以关闭并重新打开 VS,或者在某些非常糟糕的情况下关闭 VS 和 Unity,删除除 AssetsProjectSettings 之外的所有文件和文件夹以及重新启动 Unity 并让它重建并编译所有内容

标签: c# unity3d


【解决方案1】:

您缺少using 声明

using UnityStandardAssets.Vehicles.Car;

确保使用第二个

usercontrol.GetComponent<CarController>().enabled = true;

第一个需要一个字符串,而不是像

usercontrol.GetComponent("CarController").enabled = true;

或者typeof的用法喜欢

usercontrol.GetComponent(typeof(CarController)).enabled = true;

查看GetComponent API

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多