BepInEx 中如何创建和管理 GameObject 以实现与 Unity 原生行为一致的 MonoBehavior
在 Unity 游戏中,所有的 MonoBehavior 都是附加在 GameObject 上的,并且 MonoBehavior 给予了 GameObject 一些行为和功能。但是在 BepInEx 中,只有 MonoBehavior,它们没有直接附加到 GameObject 上。
要让你定义的 MonoBehavior 和 Unity 自带的 MonoBehavior 类似,你可以在你的 MonoBehavior 中创建一个 GameObject,并将其作为子对象附加到一个已有的 GameObject 上。这样,你的 MonoBehavior 就会有外观、能够被渲染,以及有实体位置。
以下是一个示例代码,演示如何创建一个 GameObject,并将其作为子对象附加到另一个 GameObject 上:
using UnityEngine;
public class MyScript : MonoBehaviour
{
private GameObject myGameObject;
private void Start()
{
// 创建一个新的 GameObject
myGameObject = new GameObject('MyGameObject');
// 设置 GameObject 的位置
myGameObject.transform.position = new Vector3(0, 0, 0);
// 将新的 GameObject 作为子对象附加到当前 GameObject
myGameObject.transform.SetParent(this.transform);
// 添加一个 SpriteRenderer 组件,并设置贴图
SpriteRenderer spriteRenderer = myGameObject.AddComponent<SpriteRenderer>();
spriteRenderer.sprite = Resources.Load<Sprite>('YourSpriteImagePath');
}
}
在上面的示例中,我们创建了一个名为 'MyGameObject' 的 GameObject,并将其作为子对象附加到当前的 GameObject。然后,我们添加了一个 SpriteRenderer 组件,并设置了贴图。
注意,当你在 BepInEx 中使用这种方式创建 GameObject 时,它们不会被自动销毁。你需要手动管理它们的创建和销毁。如果你希望在场景切换时自动销毁这些 GameObject,你可以使用 DontDestroyOnLoad 方法。
DontDestroyOnLoad(myGameObject);
这样,myGameObject 就不会在场景切换时被销毁。
希望这些信息能对你有所帮助!
原文地址: https://www.cveoy.top/t/topic/o8dX 著作权归作者所有。请勿转载和采集!