Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/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# 为什么游戏对象不附加到列表中?_C#_List_Unity3d - Fatal编程技术网

C# 为什么游戏对象不附加到列表中?

C# 为什么游戏对象不附加到列表中?,c#,list,unity3d,C#,List,Unity3d,我目前正在制作一个游戏原型,这个游戏需要 产生一些我称之为“星星”的游戏对象,所有这些都很好 实例化,但当我试图删除它们时,有很多 在它不起作用的情况下,我试图将所有的实例化 在列表中添加游戏对象,然后在需要时从列表中删除最后一个对象 新的一个被实例化了。从代码中可以看出,当3 对象已生成。脚本应从一开始就删除一个对象 同时产生一个新的 现在,问题是我不知道我在这里遗漏了什么,代码不起作用,我也不知道为什么。请帮帮我。谢谢大家! 代码如下: using System.Collections; u

我目前正在制作一个游戏原型,这个游戏需要 产生一些我称之为“星星”的游戏对象,所有这些都很好 实例化,但当我试图删除它们时,有很多 在它不起作用的情况下,我试图将所有的实例化 在列表中添加游戏对象,然后在需要时从列表中删除最后一个对象 新的一个被实例化了。从代码中可以看出,当3 对象已生成。脚本应从一开始就删除一个对象 同时产生一个新的

现在,问题是我不知道我在这里遗漏了什么,代码不起作用,我也不知道为什么。请帮帮我。谢谢大家!

代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SpawnStar : MonoBehaviour {

    public float addedSpeed = -200f;

    private GameObject spawned;
    private float randomX;
    public GameObject starToSpawn;
    private List<GameObject> activeGO;


    void Start ()
    {
        activeGO = new List<GameObject> ();
        Invoke ("InstantiateStar", 2f);
    }

    // Update is called once per frame
    void FixedUpdate () 
    {
        GetComponent<Rigidbody>().AddForce( new Vector3( 0f, addedSpeed, 0f));
    }

    void InstantiateStar () 
    {
        randomX = Random.Range (-3f, 3f);
        GameObject GO;
        GO = Instantiate (starToSpawn, new Vector3(randomX, 5f, 0f), transform.rotation) as GameObject;
        activeGO.Add (GO);
        if ( activeGO[0].transform.position.y < -2f)
        {
            DeleteActiveGO ();
        }
    }
    void DeleteActiveGO ()
    {
        Destroy (activeGO [0]);
        activeGO.RemoveAt (0);
    }
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类:单行为{
公共浮点加法速度=-200f;
私人游戏对象产生;
私有浮动随机数x;
公共游戏对象starToSpawn;
私有列表activeGO;
无效开始()
{
activeGO=newlist();
调用(“实例化estar”,2f);
}
//每帧调用一次更新
无效固定更新()
{
GetComponent().AddForce(新矢量3(0f,addedSpeed,0f));
}
void实例化estar()
{
randomX=随机范围(-3f,3f);
游戏对象围棋;
GO=实例化(starToSpawn,新矢量3(randomX,5f,0f),transform.rotation)为游戏对象;
activeGO.Add(GO);
if(activeGO[0].transform.position.y<-2f)
{
DeleteActiveGO();
}
}
void DeleteActiveGO()
{
销毁(activeGO[0]);
activeGO.RemoveAt(0);
}
}
我带着最新消息回来了。问题是我试图在一个脚本中做两件事…简短的故事:为了解决这个问题,我在场景中创建了一个空对象,将我的脚本分为两个单独的脚本,一个脚本使生成的对象移动得更快,另一个脚本正在生成对象,我将移动对象的脚本放在将要生成的对象上,另一个脚本放在将生成“星星”的空游戏对象上,它就像一个符咒。 谢谢你的回答

以下是最终脚本:

生成脚本:

使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类明星:单一行为{
公共游戏对象[]starsToSpawn;
私人名单产生的明星;
私有浮动随机数x;
无效开始()
{
spawnedStars=新列表();
调用重复(“繁殖星”,0f,3f);
}
空星()
{
randomX=随机范围(-3,3);
游戏对象围棋;
GO=实例化(starsToSpawn[0],新向量3(randomX,5f,0f),transform.rotation);
生成的星星。添加(GO);
如果(sprownedstars.Count>2)
{
摧毁(繁殖恒星[0]);
sprownedstars.RemoveAt(0);
}
}
}
移动脚本:

使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共阶层明星:单一行为{
公众浮子加速度=-5f;
无效固定更新()
{
GetComponent().AddForce(新矢量3(0f,加速度,0f));
}
}

@Noobie:您试图做的是称为对象池。您的实现相当不正确

您最好学习并实施相同的方法

在此处阅读更多内容:

您的代码
调用(“实例化启动”,2f)只调用一次

您可以更改为
InvokeRepeating(“实例化启动”,2f,2f)

代码GetComponent().AddForce(新矢量3(0f,addedSpeed,0f))似乎应该附加到生成游戏对象

还要注意您的删除条件


祝你好运。

你能说得更具体一点吗?“代码不工作”是相当模糊的。在代码中,您在哪里检查是否生成了三个对象?我看到的唯一代码将在y坐标超出范围时删除星号。另外,
starToSpawn
设置为什么?因为它看起来像是你的
FixedUpdate
正在移动
SpawnStar
游戏对象,而不是spawensedstars,这意味着你的任何星星都不会被删除。你的星星真的在移动吗?Yhea,我犯了一些错误,脚本附加到了我想要删除的对象上…我将把脚本分为两个单独的脚本,我将以不同的方式处理生成…感谢你指出错误,我将编辑问题,明天返回结果。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SpawnStars : MonoBehaviour {

    public GameObject[] starsToSpawn;

    private List<GameObject> spawnedStars;

    private float randomX;

    void Start () 
    {
        spawnedStars = new List<GameObject> ();
        InvokeRepeating ("SpawnStar", 0f, 3f);
    }
    void SpawnStar () 
    {
        randomX = Random.Range (-3, 3);
        GameObject GO;
        GO = Instantiate ( starsToSpawn[0], new Vector3 (randomX, 5f, 0f), transform.rotation);

        spawnedStars.Add (GO);

        if (spawnedStars.Count > 2 ) 
        {
            Destroy (spawnedStars [0]);
            spawnedStars.RemoveAt (0);
        }
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MoveStar : MonoBehaviour {

    public float acceleration = -5f;

    void FixedUpdate () 
    {
        GetComponent<Rigidbody>().AddForce( new Vector3( 0f, acceleration,0f));
    }
}