2015-08-14 61 views
1

我想要实现一个无尽的跑步者,随机运行时实例化平铺(模块化)模型到另一个上。无限与随机环境产卵

这是附加到模型的代码,当它用“玩家”触发时,它从数组中随机地实例化一个新模型。不过,我希望它会在前一个模型的-90x处产生,以便它们平铺。目前,它在-90, 0 , 0实例化为世界空间。

function OnTriggerEnter (hit : Collider) { 
    //obstacles spawn 
    if(hit.gameObject.tag == "Player") { 
     var toSpawn : GameObject = obstacles[Random.Range(0,obstacles.Length)]; 
     var spawnPosition = new Vector3 (-90,0,0); 
     var Spawn = Instantiate (toSpawn, spawnPosition), Quaternion.identity; 
    } 
} 

回答

4

你可以保持计算已经放置了多少瓦片,并将其用作乘数。

private int tileCount = 1; 

,并在您OnTriggerEnter()方法:

var offset = new Vector3 (-90 * tileCount,0,0); 
tileCount++; 
+0

这很好用,但是,如何设置这些瓷砖的旋转?它们以奇怪的角度实例化。 –

+0

我必须承认我是新来的Unity,所以我无法解释奇怪的角度。你可以将旋转属性设置为默认值吗? – Eraph

+1

我通过为每个模块化图块添加一个简单的transform.rotation脚本来解决这个问题,因此当它们实例化时,它们会旋转到正确的角度。感谢您的帮助。 –

1

需要缓存老瓦当时还是觉得莫名其妙

GameObject lastSpawn; 

function OnTriggerEnter (hit : Collider) 
{ 
    //obstacles spawn 
    if(hit.gameObject.tag == "Player") 
    { 
     var toSpawn : GameObject = obstacles[Random.Range(0,obstacles.Length)]; 
     var offset = new Vector3 (-90,0,0); 
     var spawn = Instantiate (toSpawn, lastSpawn.transform.position + offset), Quaternion.identity) as GameObject; 
     lastTile = spawn; 
    } 
} 

现在这个人会允许可变片大小(未测试):

GameObject lastSpawn; 

function OnTriggerEnter (hit : Collider) 
{ 
    //obstacles spawn 
    if(hit.gameObject.tag == "Player") 
    { 
     var toSpawn : GameObject = obstacles[Random.Range(0,obstacles.Length)]; 
     var offset = lastSpawn.GetComponent<MeshRenderer>().bounds.extents + gameObject.GetComponent<MeshRenderer>().bounds.extents; 
     offset.y = 0f; 
     var spawn = Instantiate (toSpawn, lastSpawn.transform.position + offset), Quaternion.identity) as GameObject; 
     lastTile = spawn; 
    } 
} 
+0

谢谢您的回复!由于存在一些编译错误,我无法测试它们。我在JS工作。 –