因此,我能够在运行时示例化新对象,它们会在附加了正确脚本的情况下生成,但脚本现在会在其插槽中固定变量的情况下生成。
我需要一种方法来产生附加脚本的预制件,并且脚本中的变量槽都已填充。
部署胶囊脚本(链接到主摄像机)
public class deployCapsule : MonoBehaviour
{
public GameObject CapsulePrefab;
public Path path;
public float respawnTime = 1.0f;
void Start()
{
StartCoroutine(capsuleWave());
}
private void spawnCap()
{
GameObject a = Instantiate(CapsulePrefab) as GameObject;
a.transform.position = new Vector2(1.0f, 1.0f);
path.followers.Add(a);
Debug.Log("1");
}
IEnumerator capsuleWave()
{
while (true)
{
yield return new WaitForSeconds(respawnTime);
spawnCap();
}
}
}
路径跟随器脚本
public class PathFollower : MonoBehaviour
{
public float movementSpeed;
//private float pathProgress = 0;
public GameObject objectToSpawn;
public Transform[] positionPoint;
[Range(0,1)]
public float value;
void Start()
{
Debug.Log(iTween.PathLength(positionPoint));
}
void Update()
{
movementSpeed = 10f;
if (value < 1)
{
value += Time.deltaTime / movementSpeed;
}
iTween.PutOnPath(objectToSpawn, positionPoint, value);
}
private void OnDrawGizmos()
{
iTween.DrawPath(positionPoint,Color.green);
}
}
我知道这在技术上是不可能的。但我需要一种方法来完成这件事。
我对团结是相当新的,并将感谢给予的任何帮助。提前感谢你。
3条答案
按热度按时间im9ewurl1#
在deployCapsule中,存储对点数组的引用
在检查器中分配值。
一旦你示例化了这个预置,就给予它一个数组
或者,通过获取对具有数据的类的引用,设置新示例化的Capsule的Awake()或Start()函数中的值。
oogrdqng2#
在示例化胶囊预制件并为其分配一个名为
a
的引用之后(我建议您将此命名更改为更符合逻辑的名称)假设您的prefab已经连接了
PathFollower
组件,您可以使用GameObject.GetComponent<T>
方法来访问它。之后,您可以使用对位于层次和场景中的“点”游戏对象的引用填充
positionPoint[]
变换的数组(假设这就是您要找的)。这取决于你如何去做:
tag
,使用GameObject.FindGameObjectsWithTag("Point");
GameObject
获取子对象,并将其子变换添加到数组中请注意,上面提到的可能不会返回的顺序,你把他们的点,所以你可能需要排序!一般来说,有很多其他的方法,你可以找到搜索论坛,或在谷歌!
t3psigkw3#
这里的问题是你的预制件在项目中,而路径节点在场景中。你有两种方法来解决这个问题。
首先,路径节点位于父对象下,该父对象包含一个容器脚本:
您可以使用单例模式(是的,如果使用得当,就可以了),或者让新创建的对象使用FindObjectOfType,然后就可以访问节点了。
第二种解决方案是将你的对象的预制件作为一个非活动对象在场景中创建。在场景中,你可以将你需要的所有东西从场景拖放到场景中。预制件被拖到原始项目预制件(CapsulePrefab)的位置,当创建它的克隆时,你只需要将它设置为活动。