- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在解决这个问题时遇到了麻烦,并且在谷歌上找不到任何帮助我的东西。
在unity中,如果脚本派生自MonoBehaviour,则不能使用“new”关键字实例化。美好的。所以我一直在研究如何做到这一点,似乎获取 GameObject,然后获取它的 GameComponent 是可行的方法......但它不会走得太远......
所以我有一个名为 NetworkManager 的游戏对象。附加到它的是一个名为 NetworkManager 的脚本。我有另一个名为 Main 的游戏对象,附加到它的是一个名为 Main 的脚本(惊喜!)。基本上我想做的是在主脚本中“实例化”网络管理器,这样我就可以执行 networkManager.hostServer() 或 networkManager.kickPlayer() 等操作。
这是我的 main.cs 脚本:
public class Main : MonoBehaviour {
Player player;
GameObject networkManager;
UiManager uiManager;
// Use this for initialization
void Start ()
{
player = new Player(Network.player, Environment.UserName, 0, 0);
networkManager = GameObject.FindGameObjectWithTag("NetworkManager").GetComponent<NetworkManager>();
uiManager = new UiManager();
}
我得到的错误如下:“无法将类型‘Assets.scripts.NetworkManager’隐式转换为‘UnityEngine.GameObject’”
当我添加“.GetComponent();”时出现问题部分。现在看来很明显,如果该函数正在寻找一个 Component 类型,而不是获取一个 NetworkManager 类型,那么它是行不通的……这就是我被困的地方。我不知道如何让它发挥作用,而且我已经超过了 15 分钟的谷歌搜索限制。
最佳答案
如果你想实例化新的网络管理器游戏对象,你应该花一些时间来了解“预制件”。您可以将网络管理器游戏对象从您的场景拖到其中一个文件夹中,使其成为其中之一。实例化预制件非常简单:
Instantiate(NetworkManagerPrefab, new Vector3(0, 0, 0), Quaternion.identity);
这将在您的场景中创建新的 NetworkManager GameObject。
如您所说,您的脚本无法正常工作,因为它正在获取组件并将其存储到 GameObject。只需将变量的类型更改为组件的类型,或者如果组件是脚本,则更改为类的类型。在您的情况下,将 GameObject networkManager;
更改为 NetworkManager networkManager;
它将起作用。
关于c# - 如何实例化一个: monobehaviour script from another GameObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26446946/
这个问题在这里已经有了答案: Declaring a new instance of a class in C# (2 个答案) 关闭 1 年前。 有没有一种方法可以实例化从 MonoBehavio
我正在尝试为我在 Unity 3D 中制作的游戏制作主脚本。 using System.Collections; using System.Collections.Generic; using Uni
有时我会看到 Unity 程序员如何使用一个脚本来继承几乎整个项目的 MonoBehavior。所谓的“更新管理器”。所有脚本都订阅到队列中执行,管理器运行所有函数,并在执行后将它们从队列中移除。 这
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Room : M
我已将脚本附加到 Unity 游戏对象。该脚本包含各种公共(public)属性,包括我自己的一些类。就像在下面的简化代码中一样,其中 TestMonoBehaviorClass 附加到游戏对象,Tes
我正在使用 Unity3d 和 MonoDevelop 在 Linux Mint(19.3 Cinnamon,64 位)上开发游戏。 但是,当我在 MonoDevelop 中打开 C# 脚本时,它无法
首先,我想简要介绍一下我的问题:我如何访问附加到另一个游戏对象的另一个代码片段,或者我如何在没有附加游戏对象的情况下初始化一个类。 当我在 Unity 中制作一个小游戏时,我制作了一个单位设计器,您可
我在 Unity 中有项目,也是 C# 的新手。问题是我收到错误脚本需要从 MonoBehaviour 派生。我明白这是什么意思,但是当我使用 MonoBehaviour 时,我遇到了很多这样的错误:
这个问题在这里已经有了答案: Use coroutine inside a non MonoBehaviour class (1 个回答) 关闭 6 年前。 编辑: 解决这个问题的答案确实在帖子的答
如何在非 Monobehaviour 类的实例中传递 Monobehaviour?我找到了这个 link其中 TonyLi 提到您可以传递 Monobehaviour 以在类的实例中启动和停止协程,但
在 Unity3d 中,您有 MonoBehaviour 类,它是所有脚本的普通基类。执行脚本时,必须执行 Awake() 或 Start() 或 Update() 等方法。 但是,这些方法在 Mon
假设我有一个名为 ObjectA 的对象,它包含两个对象:ObjectsB 和 ObjectC。 [System.Serializable] public ClassA { public Cl
背景:从 Monobehaviour 继承的类不能被序列化。 前提:一种保存 MonoBehaviour 脚本的数据(变量/字段及其值)的方法,以便可以对其进行序列化,然后再次反序列化并使用此数据“填
我在 Github 上有以下开源项目 ( game project )。我目前正在尝试对我使用 MSTest 框架编写的代码进行单元测试,但所有测试都返回相同的错误消息:“未处理的异常:System.
我有一个带有警告的 Unity 项目: The referenced script on this Behaviour is missing! 我已经确定了哪些游戏对象具有这些错误引用,并且我有一组脚
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 4 年前。 Improve
我在解决这个问题时遇到了麻烦,并且在谷歌上找不到任何帮助我的东西。 在unity中,如果脚本派生自MonoBehaviour,则不能使用“new”关键字实例化。美好的。所以我一直在研究如何做到这一点,
我有一个 Inventory:MonoBehaviour,它在 Start() 中加载一些模拟数据,包括一个已设置且可以读取的“selectedWeapon”变量。 假设我想在同一场景中设置另一个 M
using UnityEngine; using System.Collections; public class VariablesAndFunctions : MonoBehaviour {
我有一个“SingletonManager”类,其中包含“LevelManager”单例实例(及其接口(interface))。 “LevelManager”GameObject 不应在整个应用程序生
我是一名优秀的程序员,十分优秀!