2016-07-16 94 views
1

我想开发一个2D游戏,我的敌人将弹出并消失在随机位置,彼此没有重叠。我在YouTube上跟随本教程https://www.youtube.com/watch?v=iLTP4EbM1N4,但是当我的玩家触及一个敌人时,他将失去2条生命而不是1条。我想这是因为敌人会在同一个生成点随机产生(我有5个敌人)。你有什么建议如何解决这个问题?任何帮助将不胜感激。提前致谢。这里是我的两个脚本:团结:在C中随机位置重叠随机对象随机对象#

SpawnItems.cs

using UnityEngine; 
using System.Collections; 

public class SpawnItems : MonoBehaviour 
{ 
    public Transform[] SpawnPoints; 
    public float spawnTime = .5f; 
    public GameObject[] Coins; 

    void Start() 
    { 
     InvokeRepeating ("SpawnCoins", spawnTime, spawnTime); 
    } 

    void Update() 
    { 

    } 

    void SpawnCoins() 
    { 
     for (int i = 0; i < Coins.Length; i++) { 
      int spawnIndex = Random.Range (0, SpawnPoints.Length); 

      //int objectIndex = Random.Range (0, Coins.Length); 

      Instantiate (Coins [i], SpawnPoints [spawnIndex].position, SpawnPoints [spawnIndex].rotation); 

    } 
} 

Destroy.cs

using UnityEngine; 
using System.Collections; 

public class DestoryScript: MonoBehaviour 
{ 

    public float destoryTime = .5f; 
    private float rotateSpeed = 300.0f; 

    void Start() 
    { 
     Destroy (gameObject, destoryTime); 
    } 

    void Update() 
    { 
     transform.Rotate (Vector3.forward * Time.deltaTime * rotateSpeed); 
    } 
} 

Orange ball overlaps with green ball

+0

你能否证实敌人正在那时产卵?你的'Destroy'方法需要0.5秒才能移除物体,所以在这个时间范围内可能发生两次碰撞? – keyboardP

+0

嗨@keyboardP是的,我的敌人正在那个时候产卵,每个敌人都要花费0.5秒的时间才能移除。但同时,两个敌人在同一点上重叠。仅供参考:我的播放器还有另一个脚本。 – Afrin

+0

选择一个随机位置“possibleNewSpawnPoint”。然后仔细检查该点是否靠近任何现有的敌人。如果它靠近现有的敌人,则选择另一个随机的“possibleNewSpawnPoint”。继续这样做,直到你得到一个不太接近的东西。这是游戏工程中的绝对基本模式。 – Fattie

回答

0

SpawnCoins()SpawnItems.cs应该是这样的:

void SpawnCoins() 
{ 
    Transform currentSpawnPoint = SpawnPoints[Random.Range(0, SpawnPoints.Length)].transform; 

    Instantiate (Coins [Random.Range(0, Coins.Length)], currentSpawnPoint.position, currentSpawnPoint.rotation); 
} 
+0

hi @SP。我将SpawnCoin方法应用于SpawnItem.cs,但是当我编写Transform而不是int时,我得到“不能将int类型转换为UnityEngine.Transform”。你能告诉我怎么解决这个问题?我在统一时是全新的:)。 – Afrin

+0

@Afrin现在复制编辑后的代码。工作正常,没有重叠。 –

+0

Hi @SP。我只是复制了代码,但我的敌人仍然彼此重叠:( – Afrin