Unity中new对象报错You are trying to create a MonoBehaviour using the 'new' keyword. This is not allowed. 怎么办
时间: 2023-06-09 12:07:18 浏览: 113
在Unity中,我们不能使用关键字“new”来创建MonoBehaviour对象,而是应该使用gameObject.AddComponent<T>()来替代。例如:
// 错误的写法
MonoBehaviour obj = new MonoBehaviour();
// 正确的写法
MonoBehaviour obj = gameObject.AddComponent<MonoBehaviour>();
相关问题
You are trying to replace or create a Prefab from the instance 'PlayerArmature' that contains the script 'StarterAssetsInputs', which does not derive from MonoBehaviour. This is not allowed. Please change the script to derive from MonoBehaviour or remove it from the GameObject. UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&)
这个错误是由于你正在尝试将一个不继承自 MonoBehaviour 的脚本 'StarterAssetsInputs' 作为 'PlayerArmature' 实例的预制体进行替换或创建,这是不允许的。
要解决这个问题,你可以考虑以下几个步骤:
1. 确保脚本 'StarterAssetsInputs' 继承自 MonoBehaviour。在脚本的声明行添加 ': MonoBehaviour',例如:`public class StarterAssetsInputs : MonoBehaviour { }`。
2. 如果脚本 'StarterAssetsInputs' 已经继承自 MonoBehaviour,那么可能是由于其他原因导致的错误。请检查你的代码,确保没有其他地方将 'PlayerArmature' 实例与 'StarterAssetsInputs' 脚本相关联。
3. 如果你确定脚本已经继承自 MonoBehaviour,并且没有其他地方与 'PlayerArmature' 相关联,那么可能是 Unity 引擎的一个问题。尝试重新导入或更新 Unity 引擎版本,以解决可能的错误。
希望以上解决方案能帮助你解决这个错误。如果问题仍然存在,请提供更多的上下文信息,以便我能够更好地帮助你。
InvalidOperationException: You are trying to read Input using the UnityEngine.Input class, but you have switched active Input handling to Input System package in Player Settings. UnityStandardAssets.CrossPlatformInput.PlatformSpecific.StandaloneInput.GetA
pKey is causing the InvalidOperationException because you are trying to read input using the old UnityEngine.Input class, but you have switched to the new Input System package in Player Settings. To fix this issue, you need to update your code to use the new Input System API for reading input.
Here's an example of how you can read input using the new Input System:
```csharp
using UnityEngine;
using UnityEngine.InputSystem;
public class YourScript : MonoBehaviour
{
private PlayerControls controls;
private void Awake()
{
controls = new PlayerControls();
}
private void OnEnable()
{
controls.Enable();
}
private void OnDisable()
{
controls.Disable();
}
private void Update()
{
float inputValue = controls.YourActionMap.YourInputControl.ReadValue<float>();
// Do something with the input value
}
}
```
In this example, `YourActionMap` refers to the action map you have defined in the Input System settings, and `YourInputControl` refers to the specific input control you want to read.
Make sure you have properly set up your Input System settings in the Unity Editor and defined the necessary action maps and input controls.