После вызова KeyPress мой игровой объект выглядит нормально, но не вызывается снова при нажатии клавиши?
Я создавал и уничтожал свои игровые объекты ранее, но, узнав, что он интенсивно использует процессор, манипулировал моим кодом, чтобы он представлял собой пул объектов из 1 объекта. Когда я нажимаю Z, мой объект активируется и начинает масштабироваться больше, пока нажата Z, и при нажатии клавиши вверх он деактивирует объект, но когда Z нажимается снова, объект больше не вызывается. Что я делаю неправильно?
float speed = 2f;
public GameObject radius;
public int pooledAmount = 1;
List<GameObject> radiusorb;
void Start(){
radiusorb = new List<GameObject> ();
for (int i = 0; i < pooledAmount; i++)
{
GameObject obj = (GameObject)Instantiate (radius);
obj.SetActive(false);
radiusorb.Add (obj);
}
}
void Update (){
if(Input.GetKeyDown(KeyCode.Z))
{
Invoke("LetRadiusExist",0.001f); //Instantiating the prefab
}
if (Input.GetKey(KeyCode.Z)) { //Scale the object
if (gameObject != null)
{
gameObject.transform.localScale += gameObject.transform.localScale * (Time.deltaTime * speed);
}
}
if(Input.GetKeyUp(KeyCode.Z)) //To deactivate the prefab
{
gameObject.SetActive(false);
//Destroy(cloneRadius, 0);
}
}
void LetRadiusExist()
{
for (int i = 0; i < radiusorb.Count; i++)
{
if (!radiusorb[i].activeInHierarchy)
{
radiusorb[i].SetActive(true);
radiusorb[i].transform.parent = transform;
radiusorb[i].transform.localPosition = new Vector3(0,0,0);
break;
}
}
}
1 ответ
Решение
Вы изменяете фактический игровой объект вместо радиуса, который вы объединили. Поэтому, когда клавиша Z отпускается, вы деактивируете свой игровой объект, и дальнейшая обработка не производится.
Также вам на самом деле не нужен список, так как вы используете только один объект. Так что это может быть значительно упрощено:
float speed = 2f;
public GameObject radiusPrefab;
// your "pooled" instance.
private GameObject instance;
void Start(){
instance = (GameObject)Instantiate (radiusPrefab);
instance.SetActive(false);
}
void Update (){
if(Input.GetKeyDown(KeyCode.Z))
{
instance.SetActive(true);
}
if (Input.GetKey(KeyCode.Z)) { //Scale the object
instance.transform.localScale += instance.transform.localScale * (Time.deltaTime * speed);
}
if(Input.GetKeyUp(KeyCode.Z)) //To deactivate the prefab
{
// make sure to reset the scale!
instance.transform.localScale = Vector3.one;
instance.SetActive(false);
}
}