Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/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
Unity3d Unity-项目面板中缺少子元素扩展按钮的预制_Unity3d_Unity Container_Unity3d 2dtools - Fatal编程技术网

Unity3d Unity-项目面板中缺少子元素扩展按钮的预制

Unity3d Unity-项目面板中缺少子元素扩展按钮的预制,unity3d,unity-container,unity3d-2dtools,Unity3d,Unity Container,Unity3d 2dtools,我一直在学习一门课程。在本课程中,添加了一个名为“路径(0)”的游戏对象,该游戏对象有三个子游戏对象(“航路点(0/1/2)”。在本教程中,玩家将父游戏对象“路径(0)”拖动到项目面板中名为“路径”的文件夹中,以创建一个预置。此预制件显示时带有一个用于展开它的手柄。然后,他展开该预置,以查看可以拖动到检查器中的子元素,如下所示(用红色框突出显示的展开按钮) 当我执行这些操作时,项目面板在“路径”预置上没有展开按钮(见下文) 为什么项目面板中的预制对象没有这些展开按钮 基本上,他所做的就是创建

我一直在学习一门课程。在本课程中,添加了一个名为“路径(0)”的游戏对象,该游戏对象有三个子游戏对象(“航路点(0/1/2)”。在本教程中,玩家将父游戏对象“路径(0)”拖动到项目面板中名为“路径”的文件夹中,以创建一个预置。此预制件显示时带有一个用于展开它的手柄。然后,他展开该预置,以查看可以拖动到检查器中的子元素,如下所示(用红色框突出显示的展开按钮)

当我执行这些操作时,项目面板在“路径”预置上没有展开按钮(见下文)

为什么项目面板中的预制对象没有这些展开按钮

基本上,他所做的就是创建一个带有敌人预置的脚本组件。而childobject“航路点”是场景中敌人移动的标记。我在youtube上上传了教程的一部分,一旦问题解决,我会将其删除。如果youtube没有删除它。请帮助我完成一半的教程

公共类对抗:单一行为{ [序列化字段]列出航路点; [SerializeField]浮点移动速度=2f; int waypointIndex=0

void Start()
{
    transform.position = waypoints[waypointIndex].transform.position;
}

// Update is called once per frame
void Update()
{
    Move();
}

private void Move()
{
    if (waypointIndex < -waypoints.Count - 1)
    {
        var targetPosition = waypoints[waypointIndex].transform.position; // this is where we go to
        var movementThisFrame = moveSpeed * Time.deltaTime; // this is how fast we want to go to
        transform.position = Vector2.MoveTowards(transform.position, targetPosition, movementThisFrame);

        if (transform.position == targetPosition)
        {
            waypointIndex++;
        }
    }
    else
    {
        Destroy(gameObject);
    }
}
void Start()
{
transform.position=waypoints[waypointIndex].transform.position;
}
//每帧调用一次更新
无效更新()
{
Move();
}
私人空位移动()
{
if(航路点索引<航路点计数-1)
{
var targetPosition=waypoints[waypointIndex].transform.position;//这就是我们要去的地方
var movementThisFrame=moveSpeed*Time.deltaTime;//这就是我们想要达到的速度
transform.position=Vector2.moveToward(transform.position,targetPosition,movementThisFrame);
if(transform.position==targetPosition)
{
waypointIndex++;
}
}
其他的
{
摧毁(游戏对象);
}
}

这一定是因为你没有相同的统一版本

只需双击Path0,它就会打开它。在Hierarchy选项卡中,您将看到资产及其元素。 如果将Path0拖回场景,其子对象也将出现

这是因为您不应该将子资产拖离其父资产。 我不知道它在你的教程中是如何使用的,但是如果需要的话,你也可以通过将它拖到文件夹中(双击Path0之后)来制作一个子预置

编辑:

我真的不知道你能做些什么来达到完全相同的情况,但这里有另一种方法:

-创建标记“航路点”,并为航路点0、航路点1和航路点2设置此标记(在您的资源中,或在创建之前)

-在EnemyPathing.cs的开始方法中添加以下内容:

this.waypoints = new List<Transform>();
foreach(GameObject g in GameObject.FindGameObjectsWithTag("waypoint"))
{
    waypoints.Add(g.transform);
}
this.waypoints=新列表();
foreach(GameObject.FindGameObjectsSwithTag(“航路点”)中的GameObject g)
{
航路点。添加(g.变换);
}

因此,它将自动添加您的航路点,即使您的场景中有多于或少于3个航路点。

我已用一些信息更新了问题,可能会有所帮助。如果您能帮助我,我将不胜感激。谢谢。非常感谢。我会尝试让您知道进展情况。再次非常感谢。