Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 改变预制件';脚本中的s字段(Unity)_C#_Unity3d - Fatal编程技术网

C# 改变预制件';脚本中的s字段(Unity)

C# 改变预制件';脚本中的s字段(Unity),c#,unity3d,C#,Unity3d,我有一个立方体预制与立方体脚本附加。脚本的公共整数变量默认为3 public class Cube : MonoBehaviour { public int A = 3; } 在另一个脚本中,我引用(通过在inspector中拖动)这个预置。然后我把它的变量改为10: public class GameManager : MonoBehaviour { public Cube cube; void Start() { cube.A = 10;

我有一个立方体预制与立方体脚本附加。脚本的公共整数变量默认为3

public class Cube : MonoBehaviour
{
   public int A = 3;
}
在另一个脚本中,我引用(通过在inspector中拖动)这个预置。然后我把它的变量改为10:

public class GameManager : MonoBehaviour
{
    public Cube cube;

    void Start()
    {
        cube.A = 10;
    }
}

所以问题是:我刚刚改变了什么?它不是预置,因为正如我在Assets文件夹中看到的,预置的变量保持不变。

在这个场景中,您实际上是在运行时修改预置。我设置了一个快速测试来显示这一点。我将
cubePrefab
cubePrefab
cubeComponent
字段的
cubemanager1
cubePrefab
预置拖入检查器,并将相同的
cubePrefab
字段拖入
GameManager2
cubePrefab
字段的检查器

开始游戏时,
GameManager1
将预置的
Cube
组件修改为10,而不是3。然后它生成预置的实例并打印其
A
值,显示为10

一秒钟后,
GameManager2
生成一个
Cube
预置的实例,并打印其
A
值,该值最终也是10

Cube.cs

public class Cube : MonoBehaviour
{
    public int A = 3;
}
public class GameManager1 : MonoBehaviour
{
    public GameObject cubePrefab;
    public Cube cubeComponent;    

    void Start()
    {
        cubeComponent.A = 10;
        GameObject spawnedCube = Instantiate(cubePrefab, Vector3.zero, Quaternion.identity);
        Debug.Log("A = " + spawnedCube.GetComponent<Cube>().A); //Prints 10
    }
}
public class GameManager2 : MonoBehaviour
{
    public GameObject cubePrefab;

    private void Start()
    {
        Invoke("SpawnCube", 1);
    }

    void SpawnCube()
    {
        GameObject spawnedCube2 = Instantiate(cubePrefab, Vector3.zero, Quaternion.identity);
        Debug.Log("Cube2 A = " + spawnedCube2.GetComponent<Cube>().A);
    }
}
GameManager1.cs

public class Cube : MonoBehaviour
{
    public int A = 3;
}
public class GameManager1 : MonoBehaviour
{
    public GameObject cubePrefab;
    public Cube cubeComponent;    

    void Start()
    {
        cubeComponent.A = 10;
        GameObject spawnedCube = Instantiate(cubePrefab, Vector3.zero, Quaternion.identity);
        Debug.Log("A = " + spawnedCube.GetComponent<Cube>().A); //Prints 10
    }
}
public class GameManager2 : MonoBehaviour
{
    public GameObject cubePrefab;

    private void Start()
    {
        Invoke("SpawnCube", 1);
    }

    void SpawnCube()
    {
        GameObject spawnedCube2 = Instantiate(cubePrefab, Vector3.zero, Quaternion.identity);
        Debug.Log("Cube2 A = " + spawnedCube2.GetComponent<Cube>().A);
    }
}
公共类GameManager 1:MonoBehavior
{
公共游戏对象cubePrefab;
公共立方体立方体组件;
void Start()
{
立方组分A=10;
GameObject sprownedCube=实例化(cubePrefab,Vector3.zero,Quaternion.identity);
Debug.Log(“A=“+spawnedCube.GetComponent().A);//打印10
}
}
GameManager2.cs

public class Cube : MonoBehaviour
{
    public int A = 3;
}
public class GameManager1 : MonoBehaviour
{
    public GameObject cubePrefab;
    public Cube cubeComponent;    

    void Start()
    {
        cubeComponent.A = 10;
        GameObject spawnedCube = Instantiate(cubePrefab, Vector3.zero, Quaternion.identity);
        Debug.Log("A = " + spawnedCube.GetComponent<Cube>().A); //Prints 10
    }
}
public class GameManager2 : MonoBehaviour
{
    public GameObject cubePrefab;

    private void Start()
    {
        Invoke("SpawnCube", 1);
    }

    void SpawnCube()
    {
        GameObject spawnedCube2 = Instantiate(cubePrefab, Vector3.zero, Quaternion.identity);
        Debug.Log("Cube2 A = " + spawnedCube2.GetComponent<Cube>().A);
    }
}
公共类GameManager 2:单一行为
{
公共游戏对象cubePrefab;
私有void Start()
{
调用(“生成多维数据集”,1);
}
void-cube()
{
GameObject sprownedcube2=实例化(cubePrefab,Vector3.zero,Quaternion.identity);
Log(“Cube2 A=“+spawnedCube2.GetComponent().A”);
}
}
输出


注意:对预置的修改仅在运行时持续。之后它将恢复为默认值。

有趣的问题我需要研究一下,然后才能回答谢谢。需要指出的是,预置的字段仅在运行时保持更改,并在我们停止游戏后恢复为默认值。@AnyaBarsukova是的,这是正确的。我把它加到了答案上。