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# 具有默认值的Unity运行时脚本实例化_C#_Unity3d_Parameters_Instantiation - Fatal编程技术网

C# 具有默认值的Unity运行时脚本实例化

C# 具有默认值的Unity运行时脚本实例化,c#,unity3d,parameters,instantiation,C#,Unity3d,Parameters,Instantiation,我找不到任何与我的场景匹配的主题,所以我制作了一个新的主题 我有一个类型为Light的预制,名为rewardHighlight 我有一个名为Reward的脚本,它有一个参数Highlight,并使用Light rewardHighlight=(Light)Instantiate(Highlight)实例化灯光 我使用拖放将所述脚本的Highlight参数的默认值设置为RewardHighlightprefact 当我将脚本拖放到对象上时,它可以正常工作 当我在运行时使用gameObject.Ad

我找不到任何与我的场景匹配的主题,所以我制作了一个新的主题

我有一个类型为
Light
的预制,名为
rewardHighlight

我有一个名为
Reward
的脚本,它有一个参数
Highlight
,并使用
Light rewardHighlight=(Light)Instantiate(Highlight)实例化灯光

我使用拖放将所述脚本的
Highlight
参数的默认值设置为
RewardHighlight
prefact

当我将脚本拖放到对象上时,它可以正常工作

当我在运行时使用
gameObject.AddComponent()添加
奖励
脚本时我得到了
您想要实例化的东西是空的

非常感谢大家的帮助

@更新

完整代码(为清晰起见,已剥离):


报酬2.cs

using UnityEngine;
using System.Collections;

public class Reward2 : MonoBehaviour {

    public Light Highlight;
    private Light rewardHighlight;

    // Use this for initialization
    void Start () {
       rewardHighlight = (Light) Instantiate (Highlight);
       rewardHighlight.transform.position = new Vector3(transform.position.x, transform.position.y + 1, transform.position.z);
    }

    // Update is called once per frame
    void Update () {

    }
}
Test.cs

using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour {

    // Use this for initialization
    void Start () {
        gameObject.AddComponent<Reward2>();
    }

    // Update is called once per frame
    void Update () {

    }
}
使用UnityEngine;
使用系统集合;
公共课堂测试:单一行为{
//用于初始化
无效开始(){
gameObject.AddComponent();
}
//每帧调用一次更新
无效更新(){
}
}

看起来Unity脚本在运行时“忘记”了它们的默认值

Test.Start中调用
AddComponent
后,需要为
AddComponent
返回的
Reward2
实例上的
高亮显示
字段赋值

例如,您的
Test.Start
可能看起来有点像这样:

void Start()
{
    Reward2 obj = gameObject.AddComponent<Reward2>();
    obj.Highlight = <SOME VALUE>;
}

2)
开始
方法中创建一个游戏对象,向其添加一个灯光组件,然后将该组件指定给
高亮显示
字段:

void Start()
{
    Reward2 obj = gameObject.AddComponent<Reward2>();

    GameObject gameObjectForLight = new GameObject();
    Light newLight = gameObjectForLight.AddComponent<Light>();

    //  Initialize newLight here

    obj.Highlight = newLight;
}
void Start()
{
Reward2 obj=gameObject.AddComponent();
GameObject gameObjectForLight=新GameObject();
Light newLight=gameObjectForLight.AddComponent();
//在这里初始化newLight
突出显示对象=新灯光;
}

在任何一种情况下,当
Reward2.Start
调用
实例化
时,它将看到
高亮显示
字段是一个组件,然后它将获得该组件所连接的游戏对象,并将创建该游戏对象的新实例。

“Highlight”是(我相信)一个变量,因此它应该是“Highlight”。请单击“编辑”并包含您的代码,“突出显示”的声明和“实例化”的位置。Cheers请参见上面的更新,因为您仅将脚本添加为组件。它不会维护你的价值观,因为它会将其视为新的价值观。
void Start()
{
    Reward2 obj = gameObject.AddComponent<Reward2>();

    GameObject gameObjectForLight = new GameObject();
    Light newLight = gameObjectForLight.AddComponent<Light>();

    //  Initialize newLight here

    obj.Highlight = newLight;
}