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;
}