【问题标题】:dynamically creating variable names and instantiating them(Unity)动态创建变量名并实例化它们(Unity)
【发布时间】:2014-07-05 06:10:30
【问题描述】:

您好,我是 Unity 新手,我正在尝试为敌人创建 AI 脚本。在这个课程中,我有敌人会通过生成一个随机数随机走到的路点,最初我有四个路点,但这是非常线性的。所以我添加了更多内容,让它看起来好像敌人漫无目的地四处走动一样,这个http://www.youtube.com/watch?v=QMSQaS1o1Kw 可以看到一个例子。然后我添加了大约 20 个方式点来完成随机化,但我不想实例化它们中的每一个,所以我想知道是否有可能在 for 循环中将它们实例化?

到目前为止,我的代码如下所示:

private var player : GameObject;
private var way0 : GameObject;
private var way1 : GameObject;
private var way2 : GameObject;
private var way3 : GameObject;

function Start()
{
    player = GameObject.Find("Player");
    way0 = GameObject.Find("way0");
    way1 = GameObject.Find("way1");
    way2 = GameObject.Find("way2");
    way3 = GameObject.Find("way3");
}

其他一切都在更新函数中通过if语句处理

【问题讨论】:

    标签: unity3d instantiation unityscript


    【解决方案1】:

    是的,您可以使用数组来存储您需要的航点。像这样:

    private var waypoints : Array;
    
    function Start() {
      player = GameObject.Find("Player");
      waypoints = new Array();
      for (var i = 0; i < WaypointCount; ++i) {
         waypoints.Push(GameObject.Find("way" + i)); //Push the waypoint in the array.
      }
      DoSomethingWith(waypoints[0]); //This is "way0".
    }
    

    其中WaypointCount 是您希望推送的航点数量。更准确地说,是满足您使用的命名模式的航点数量。在您发布的示例中,WaypointCount 是 4。

    【讨论】:

    • 当我使用此方法时,这只是一个后续问题,当我稍后使用它们时,对象会给出一个空引用。一个例子是var distance= Vector3.Distance(player.transform.position, **waypoints[variable]**.transform.position); 变量只是一个推入函数的数字。但它没有设置变量,因为它获得了一个空引用。 @AlexM。
    • 编辑了答案,对此感到抱歉!
    猜你喜欢
    • 2013-04-21
    • 1970-01-01
    • 2021-10-26
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多