当我将向量分配给数组时,不会将其转移到rocketUpdate函数。正在使用的“基因”数组来自火箭数组中运行在gameObjects上的其他脚本。这是它的脚本。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Rockets : MonoBehaviour {
public Vector2[] Gene;
public void Start()
{
Gene = new Vector2[10];
}
}
这是主要的“控制器”脚本。
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RocketController : MonoBehaviour {
public int XVelocityMultiplier;
public int YVelocityMultiplier;
int lifespanSec;
int Count;
public int Size;
public GameObject[] rockets;
public GameObject RocketPrefab;
public System.Random rnd = new System.Random();
float x;
float y;
void Start()
{
rockets = new GameObject[Size];
lifespanSec = RocketPrefab.GetComponent<Rockets>().Gene.Length;
Invoke("killRockets", lifespanSec);
for (int i = 0; i < rockets.Length; i++)
{
GameObject rocketObject = Instantiate(RocketPrefab);
rocketObject.GetComponent<Rigidbody>().position = new Vector3(0, -4, 30);
rocketObject.name = "Rocket_" + (i+1);
for (int j = 0; j < rocketObject.GetComponent<Rockets>().Gene.Length; j++)
{
x = Convert.ToSingle(rnd.NextDouble() * (2 * XVelocityMultiplier) + XVelocityMultiplier * (rnd.Next(-1,1) + 0.1f));
y = Convert.ToSingle(rnd.NextDouble() * (YVelocityMultiplier));
rocketObject.GetComponent<Rockets>().Gene[j] = new Vector2(x, y);
Debug.Log(rocketObject.GetComponent<Rockets>().Gene[j]);
}
rockets[i] = rocketObject;
}
InvokeRepeating("RocketUpdate", 0, 1);
}
void Update()
{
if (Count == lifespanSec)
{
Count = 0;
}
}
void RocketUpdate()
{
Debug.Log(rockets[1].GetComponent<Rockets>().Gene[Count]);
if (rockets[0] != null)
{
for (int i = 0; i < rockets.Length; i++)
{
rockets[i].GetComponent<Rigidbody>().velocity = rockets[i].GetComponent<Rockets>().Gene[Count];
}
Debug.Log(rockets[1].GetComponent<Rockets>().Gene[Count]);
}
Debug.Log(Count);
Count++;
}
void killRockets()
{
for(int i = 0; i < rockets.Length; i++)
{
Destroy(rockets[i]);
}
}
}
当我在start函数中运行第一个Debug.log()时,每个gameObject都有其值。但是当我在rocketUpdate()中运行相同的Debug.log时,它突然不再具有其值。我在同一个问题上困扰了很长时间。如果有人知道问题,请告诉。
答案 0 :(得分:0)
几件事。在第一个脚本中,您没有使用一堆值填充数组,而是创建了一个新的数组,该数组的空间可以容纳10个Vector2。我不确定这是否是您想要的,但事实就是如此。为了用数据填充数据,您必须通过创建对包含实际值的脚本的引用来明确告知数据内容。例如,
private MainScript whateverYouWannaCallIt;
private Vector2[] geneCopies;
public void Awake()
{
whateverYouWannaCallIt = gameObject.GetComponent<MainScript>();
for (int i = 0; i < whateverYouWannaCallIt.rockets.Length; i++)
{
geneCopies[i] = whateverYouWannaCallIt.rockets.gene[i];
}
}
您还应该初始化一个List,并用这些火箭填充它,也许还包括那些刚性物体,这些getComponent调用将为您的开销做出很大贡献。
我也很感兴趣。该脚本的目标是什么?那你的游戏是什么?