我们一直在用这个敲打我们的头,理论上,有一个公共静态对象来保存要生成的预制件应该已经解决了这个问题,但是当static关键字出现时,脚本会得到一个静态变量不存在,但是对象仍然获得单个变量,而当我添加static关键字时,脚本的变量就会消失。我们做错了吗?这是确切的定义:
public static Object prefab;
答案 0 :(得分:1)
我对Unity也很新,但会提供一些个人研究/调查结果。我也讨厌明确地公开一些公共属性的对象,这样你就可以“坚持”#34;场景中的对象预制。如果尝试动态构建系统/游戏组件,知道何时/何时添加将由您自行决定。我也很喜欢使用STATIC的方法,这样你就可以在任何时候需要另一个""。
我发现使用"资源"可以允许您通过代码加载预制件,而无需使用场景对象来拖动控件,例如主列表。
在您的默认"资产"文件夹,创建一个文件夹"资源" (不确定是否区分大小写)。无论如何,我把所有其他的东西放在相应的文件夹下...材料,预制件,精灵,纹理,等等...现在,在我的" Prefab"文件夹,我可以预制一个" Hero"," Laser"," Shield"等等。
现在,如何将这些部分放入您的STATIC类中。您可以创建一个特殊的方法,您只需通过Unity的资源类加载它们,然后创建将返回相关项目的CLONE的函数。通过这种方式,您可以单独留下原件,并根据需要自己在游戏中使用。
像...一样的东西。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEngine;
using System.Collections;
namespace Assets.Scripts
{
public static class MyGameObjManager
{
private static bool alreadyLoaded;
public static GameObject myHero { get; private set; }
public static GameObject myWeapon {get; private set;}
public static void LoadObjects()
{
if (alreadyLoaded)
return;
// Load the resource which is RELATIVE to the "Resources" path...
myHero = (GameObject)Resources.Load("Prefab/Hero");
// This OTHER appears to load at a SPECIFIC Path allowing it to go to the root level ASSETS
myWeapon = (GameObject)Resources.LoadAssetAtPath("Assets/Resources/Prefab/Weapon", typeof(GameObject));
alreadyLoaded = true;
}
}
public class GameMgr2 : MonoBehaviour
{
public static GameObject GetHero()
{
MyGameObjManager.LoadObjects();
return (GameObject)Instantiate(MyGameObjManager.myHero, new Vector3(0, 0, 0), new Quaternion());
}
public static GameObject GetWeapon()
{
MyGameObjManager.LoadObjects();
return (GameObject)Instantiate(MyGameObjManager.myWeapon, new Vector3(0, 0, 0), new Quaternion());
}
}
}
因此,STATIC类不能从MonoBehavior派生,它允许"实例化"调用创建对象的克隆并返回它。因此,我创建了一个从MonoBehavior派生的SECONDARY非静态类,并放置了调用静态游戏对象管理器的静态方法来获取我需要的预制件。
再次,我也在学习,但希望这可以帮助你解决一些问题...至于获取英雄或武器的召唤,显然可以通过传递Vector3坐标或Quaternion值来参数化它,但你可以用它来运行。
STATIC vs NOT
根据您的代码并使其成为STATIC意味着单个实例,无论系统中的任何位置放置了多少类。因此,如果您在屏幕上有5个预制件并尝试将每个预制件放入不同的物品中,它将覆盖最后分配的任何一个预制件。将该物业作为公共场所"允许你在屏幕上有5个预制件,然后拖放不同的东西"每个人分别保留自己的东西"实例
很抱歉,我无法在不知道您要实施的目标的情况下提供更多建议。
非静态应该通过拖放操作在编辑器中提供帮助。但是,STATIC