如何处理我不知道其类型的脚本?

2023-12-03

我的游戏使用各种不同的游戏模式,我想根据所选的游戏模式在场景开始时生成不同的 GameController 脚本。然后其他项目(例如,敌人)将引用主 GameController,无论是 GameController_Mode1、GameController_Mode2 等。但是如果我不知道类型,如何让其他对象引用它呢?

Unity iOS 需要严格的 unityscript 类型,因此我无法使用鸭子类型来解决这个问题。


您可以像在 C# 中一样执行此操作,多态性。从单个基本控制器类派生所有控制器。然后你的游戏控制器var可以设置为派生控制器的任何实例(参见Start()在下面的例子中)。

这是一个使用简单控制器的快速示例:

#pragma strict

var controller : MyController;

class MyController  {
var data : int;
public function MyController(){
    this.data = 42;
}
public function Print(){
    Debug.Log("Controller: " + this.data);
}
}
class MyController1 extends MyController {
public function MyController1(){
    this.data = 43;
}
public function Print(){
    Debug.Log("Controller1: " + this.data);
}
}
class MyController2 extends MyController {
public function MyController2(){
    this.data = 44;
}
public function Print(){
    Debug.Log("Controller2: " + this.data);
}
}

function Start () {
controller = new MyController();
controller.Print(); // prints Controller: 42

controller = new MyController1();
controller.Print(); // prints Controller1: 43

controller = new MyController2();
controller.Print(); // prints Controller2: 44
}

我假设您的游戏控制器共享函数名称,唯一的区别是每个函数中的代码。

[Update]

关于Heisenbug的评论如下:如果您的控制器是组件,则可以使用GetComponent来获取基类控制器。

基类(BaseController.js):

class BaseController extends MonoBehaviour{
    public function Print(){
        Debug.Log("BaseController");
    }
}

扩展类(Controller1.js):

class Controller1 extends BaseController {
    public function Print(){
        Debug.Log("Controller1: " + this.data);
    }
}

Test:

var controller : BaseController;
controller = gameObject.GetComponent("BaseController"); //.GetComponent(BaseController) also works
controller.Print(); // will print "Controller1" if actual attached component is a Controller1 type
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何处理我不知道其类型的脚本? 的相关文章

  • UnityARAlignment 在 Unity ARKit 插件中意味着什么?

    UnityAR对齐 https i stack imgur com uwCOI png public enum UnityARAlignment UnityARAlignmentGravity UnityARAlignmentGravity
  • 添加从 Unity for Android studio 导出的 2 个模块出现错误:“错误:程序类型已存在:bitter.jnibridge.JNIBridge”

    我在 Android Studio 中的 Kotlin 中有一个 android 项目 以及 2 个 Unity 模块 像使用 Unity 的 android studio 的项目一样导出 我想在我的项目中使用它们 但我收到错误 错误 程序
  • 使用意图从 Unity 应用程序向 Android 应用程序发送数据

    我有两个独立的应用程序 AppA 使用 Android Studio 开发 和 AppB 使用 Unity 开发 AppA 将启动 AppB 这是一个游戏应用程序 用户玩完游戏 AppB 并点击退出按钮后 会将游戏记录 字符串数组 发送回A
  • 使用 Unity 3D 移动鼠标时相机跟随玩家

    我有一个简单的脚本 当我转动相机时 可以移动和环顾四周 但相机不随角色转动 我如何让它们一起转动 using System Collections Generic using UnityEngine public class PlayerF
  • Newtonsoft.Json 可在 Unity 编辑器中运行,但无法在移动设备上运行

    我正在 Unity 中编写一个按类别提问和回答的游戏 类别是通过返回 JSON 文本的 PHP 脚本获取的 当我在 UnityEditor 中使用此解决方案时 它可以正常工作 但是当我在移动设备上安装 apk 时 反序列化不起作用 与 my
  • 无法在 Android studio 和 Unity 中加载 libmain.so 作为库

    我的毕业项目遇到问题 我将 Unity 作为库添加到 Android Studio 中 它在我的手机上运行良好 但是当我在其他 Android 手机上尝试时 我遇到了一些奇怪的错误 无法加载libmain so 我搜索了很多 但没有找到答案
  • 在 Unity 中双向旋转门

    我在 Unity 中创建了一扇打开和关闭的门 我可以通过打电话打开那扇门Interact 现在我想创建一扇始终远离玩家打开的门 就像酒吧的门一样 如果玩家在房间前面 门就会旋转到房间 如果玩家在房间里 门就会旋转出去 目前我创建了一个布尔值
  • 在代码中添加一个定时器,然后循环它

    尝试找到一种方法将计时器添加到我的代码中 然后用计时器不断循环它 例如 尝试通过单击按钮来制作物品 然后等待 5 秒以使其制作 然后只要我有材料 它就会自动开始再次制作 依此类推 我环顾四周的教程 但未能找到我一直在寻找的东西 这是我想要循
  • 如何通过脚本使Texture2D可读

    我想让用户能够解码从图库加载的 QR 图像 我找到了一个插件来探索图像并将其加载为texture2D 但是要解码该 QR 代码 Texture2D 必须是可读 可写的 我检查了该插件 对于 Android 它使用 jar 进行探索和加载内容
  • Unity 自定义检查器和子检查器

    我正在Unity 2017 2 中开发一个小型ARPG 我尝试为我的游戏的能力蓝图类实现自定义编辑器 基本上 AbilityBluePrint 包含在运行时生成能力所需的所有信息 包括一个 Effect ScritpableObjects
  • Unity3d 协程在 while 循环后停止

    我有一个加载关卡的单例 LevelManager 等待来自新加载关卡的脚本将 GameObject 分配给 LevelManager 然后对其进行处理 我有以下代码 some GameObject calls the loadLevel c
  • 在下载的同时从 UnityWebRequest 获取数据?

    我有这段代码可以进行 REST 调用 public IEnumerator GetCooroutine string route string finalURL URL route UnityWebRequest www UnityWebR
  • 如何在 Windows 中获取和设置系统音量

    我想使用 unity 和 c 将键盘点击时的操作系统音量设置为一定水平 例如我想将 Windows 音量 不是 unity 设置为 70 我该怎么做 void Update if Input GetKeyDown KeyCode A Set
  • 在无头模式下独立运行 Unity,同时捕获屏幕截图

    我需要创建一个在无头模式下运行的统一项目 使用 batchmode 命令 但它必须捕获屏幕截图 例如每一秒并将它们写到一个文件中 我知道在无头模式下 您需要强制调用 Camera Render 才能渲染任何内容 在捕获第一个屏幕截图后 时间
  • 我在统一复制门时遇到问题

    我正在尝试统一复制我的门 但是 当我尝试这样做时 只有原来的门正在执行打开和关闭等动画 我有一个 UI 按钮 它使用 OnClick 函数来操作门 当我输入触发器时它会弹出 这是带有OnClick功能的按钮UI https i stack
  • UV 展开运行时优化

    我正在尝试在运行时创建 UV 我使用 BOX 类型 UV 类似于 3ds max 中的 BOX UVW 并基于面方向进行计算 我知道将其创建为运行时不是一个好的选择 但我别无选择 它是在计算后保存的 所以我做了一次 但我花了 40 秒处理
  • Unity - 在生成时获取随机颜色

    我有一个小问题 我想在我的场景中生成四边形 它们都应该有红色或绿色作为材质 但 Random Range 函数只能是 int 我该如何解决它 void SpawningSquadsRnd rndColor 0 Color red rndCo
  • 除了在 Unity3D 中使用“Assets/Gizmos”之外,如何拥有自定义脚本图标

    我知道这个问题可能被问过很多次了 但它经常被回答错误 我想要的是 Use a custom icon for specific components scripts in the Inspector e g Figure 2 and Fig
  • Unity3d 中的多线程脚本调用

    我试图在Unity3d中实现多线程脚本执行 但是Unity库似乎没有提供方法 我们必须使用Mono提供的System Threading 但他们提到 Unity Scripting 不是线程安全的 我可以使用 System threadin
  • Unity,c++ 本机插件字节数组不匹配

    在我的 C 本机插件中 我有一个调用 vector

随机推荐

  • 从数据属性将字符串解析为对象[重复]

    这个问题在这里已经有答案了 我在使用 jQuery 验证插件时遇到了很多麻烦 解决这个问题的唯一方法是使用 submitHandler属性并在其中做一些技巧 其中检查触发器的父级是否是字段集以及是否有data submit handler属
  • Android布局文件夹可以包含子文件夹吗?

    现在 我将每个 XML 布局文件存储在 res layout 文件夹中 因此管理小型项目是可行且简单的 但是当存在大型且繁重的项目时 则应该有一个层次结构和布局文件夹内需要的子文件夹 for e g layout layout person
  • 意外的括号“[” - PHP [重复]

    这个问题在这里已经有答案了 我正在为我的小应用程序团队的 Java 代码编写一个小型存储库 但我的代码中到处都是这个错误 base explode class 0 仅此问题出现one每次都一行代码 据我所知 上面是正确的PHP语法 那么这是
  • 使用 SentiWordNet 获取不正确的分数

    我正在使用 SentiWordNet 进行一些情感分析 我参考了这里的帖子如何使用 SentiWordNet 然而 尽管尝试了各种输入 我还是得到了 0 0 分 我在这里做错了什么吗 谢谢 import java io BufferedRe
  • 使用 Boost 库的 CMake Windows 10 库未正确找到

    像许多其他人一样 我在 Windows 上使用 boost 库时遇到问题 在 Ubuntu 16 04 上 它与 libboost all dev 配合得很好 但在 Windows 上我遇到了很多问题 我尝试构建一个 cryptonote
  • 用于子集索引搜索的数据结构

    我正在研究一个时间 2019 03 17 标签 c jqueryimplementation我正在尝试找出一种有效的算法来在整个 DOM 的子集中定位元素 例如子选择器 目前 我正在构建 DOM 时创建常用选择器的索引 class id 和
  • emu8086 上的 Dos 指令 3Bh 更改工作目录

    我最近开始学习x8086指令 对指令的了解比较少 我试图使用 dos 函数 3Bh 更改当前工作目录 然后使用 39h 在该目录上创建一个名为 test2 的文件夹 不明白问题是什么 还是 emu8086 的问题 MODEL SMALL C
  • 通过公式更改单元格时的时间戳 (Excel)

    我需要一种方法来为相邻单元格添加时间戳 该单元格的值通过公式发生变化 使用this例如 我需要工作表 1 上与 A1 相邻的单元格来标记单元格值更改时的日期和时间 当单元格值通过公式更改时 我链接到上面的示例会启动一个消息框 当单元格值包含
  • CSS 边框向内弯曲

    I want to build the container with bended borders inside the element Is it possible to do using only css If it is contai
  • Angular 2 表单“找不到控件”

    我正在尝试使用 Angular 2 Forms 进行验证 但是当我尝试添加多个控件时 似乎它只是被忽略了 我遵循了许多不同的指南 看看其他人是如何做的 但这些方法似乎都不起作用 我一直在我的模板中做的是
  • 使用 QT 设计器创建的 PyQt5 程序从终端打开时不显示任何窗口

    我使用 QT Designer 没有任何问题 但今天我开始了一个新的 ubuntu 18 04 安装 但这一次当我从终端运行 PyQt5 程序时 它们没有显示任何窗口 从atom runner运行时也有同样的问题 它甚至没有显示任何窗口 错
  • 如何将用户信息从登录页面传递到主页?

    Error An object reference is required for the non static field method or property User Picture 如何将用户信息从登录页面传递到主页 线上错误Pic
  • 如何在 DataTables 中使用 pdfhtml5 导出 标签

    我想导出 a 使用 DataTables 中的单元格内的标签或链接pdfhtml5 截至目前 该链接显示为纯文本 如何打印它 包括其格式 这是一个两步过程 Step 1 使用数据表exportOptions format函数将完整的 HTM
  • IRC河豚加密模式?

    我一直在用这个工具做一些测试 http crypto hurlant com demo CryptoDemo swf并尝试匹配从 Mirc Blowfish 获得的 Blowfish 结果 来自以前的 Fish secure us v1 3
  • 在远程 Linux 机器上编译 C++ - “检测到时钟偏差”警告

    我通过 PuTTY 和 WinSCP 连接到我大学的小型 Linux 集群 使用后者传输文件并使用前者编译和运行它们 到目前为止 我的工作是在大学实验室进行的 但今天我在家里做了一些工作 产生了一个有趣的警告 我上传了整个文件夹的内容 然后
  • 通用方法返回类型 - 编译错误[重复]

    这个问题在这里已经有答案了 鉴于此代码示例 class A public class TestGenerics private static
  • Chrome 在 HTTP 302 重定向时取消 CORS XHR

    看起来像根据CORS 规范 GET 和 POST 请求应透明地遵循 302 重定向 但 Chrome 正在取消我的请求 这是执行请求的 JS var r new XMLHttpRequest r open GET https dev mys
  • 带有空格的图像文件名

    我通过 php 扫描图像文件夹获取图像 URL 数组 某些图像文件名带有空格 空格后面的部分丢失了 例如 这个文件很好 http domain com folder blue sky png 这个文件会丢失sky png部分 http do
  • Django/Python 环境错误?

    当我尝试使用时出现错误syncdb python manage py syncdb 错误信息 File usr local lib python2 6 dist packages django conf init py line 83 in
  • 如何处理我不知道其类型的脚本?

    我的游戏使用各种不同的游戏模式 我想根据所选的游戏模式在场景开始时生成不同的 GameController 脚本 然后其他项目 例如 敌人 将引用主 GameController 无论是 GameController Mode1 GameC