【问题标题】:Creating a clone of a Unity prefab创建 Unity 预制件的克隆
【发布时间】:2014-12-20 10:36:24
【问题描述】:

我正在尝试从文件加载预制件并创建已加载文件的克隆而不实例化它。更改加载的克隆脚本的数据值,不应更改预制值。

我正在尝试创建克隆和加载的预制件的克隆。

使用 Resources.Load 将预制件加载到统一中:

 enemy = new Player();
 enemy.playerColor = Color.red;
 enemy.Name = "enemy";
 enemy.unitList.AddResources.Load("Prefab/Soldier", typeof(GameObject)) as GameObject);

使用实例化克隆功能加载预制件:

enemy = new Player();
enemy.playerColor = Color.red;
enemy.Name = "enemy";
enemy.unitList.Add(Instantiate(Resources.Load("Prefab/Soldier", typeof(GameObject)) as GameObject) as GameObject);

更改加载的预制件:

public void updateUnit(string prop, float val)
{
    switch (prop)
    {
        case "Movespeed":
            Movespeed += (int)val;
            break;
        case "SpawnRate":
            SpawnRate += val;
            break;
    }
}

当前的问题是使用预制件上的实例化功能,在屏幕上创建克隆。虽然使用加载的预制件会导致预制件中的脚本发生变化

【问题讨论】:

  • 您是否想过让您的预制件处于非活动状态?这样当你实例化它时,它就不会出现在屏幕上。另一种解决方案是将实例化的预制件放置在相机视图之外。您可以调用 Camera.main.ViewportToWorldPoint() 并给它一个低于 0 或高于 1 的 x 或 y 值,以将其定位在相机视图之外
  • 是的,这将是一个粗略的解决方法。我还考虑过让启动脚本重置预制件的“硬​​”编码值。

标签: c# unity3d clone


【解决方案1】:

1:创建一个游戏对象并以任何你想要的方式分配预制件

private GameObject toclone;

2:创建一个要克隆的游戏对象,以便以后调用它

private GameObject clone;

3:运行这个命令来召唤它。用vector3替换Position,用四元数替换Rotation(如果要使用vector3进行旋转,请使用Quaternion.Euler)

clone = Instantiate(toclone, Position, Rotation, Quaternion.Identity);

【讨论】:

  • 我认为关键是他不想实例化预制件,因为他称之为粗鲁的解决方法。他想在内存中实现,不需要任何实例化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多