【发布时间】:2020-07-02 20:51:34
【问题描述】:
我是 Unity 3D 的新手。我在 x:-1 y:-3 z:0 位置创建了一个游戏对象(导弹)添加了一个组件脚本,它可以向上移动球。将其保存为预制件。然后从场景中删除 Game 对象。
使用的组件脚本
using UnityEngine;
public class Missile : MonoBehaviour
{
[SerializeField] protected Rigidbody2D rb;
public float speed = 4;
void Start()
{
Invoke("Object", 2.0f);
}
void Object()
{
float x = Random.Range(-2.0f, 2.0f);
float y = -5.0f;
rb.MovePosition(new Vector3(x, y, 0));
Debug.Log("Position of Rigid Body: " + rb.position);
rb.velocity = Vector2.up * speed;
}
virtual protected void Die()
{
Destroy(gameObject);
}
}
调用了一个脚本,该脚本将预制件作为输入参数,并在随机位置生成游戏对象并根据导弹的脚本组件向上移动。我需要导弹在随机位置触发,但导弹在位置 x:-1 y:-3 z:0(游戏对象位置)和某个随机位置都被触发。生成时如何避免游戏对象位置
用于调用预制件的脚本
using UnityEngine;
using System.Collections;
using TMPro;
public class MissileSpawnner : MonoBehaviour
{
[SerializeField] GameObject[] missilePrefabs;
[SerializeField] int missileCount;
[SerializeField] float spawnDelay;
GameObject[] missiles;
#region Singleton class: MissileSpawnner
public static MissileSpawnner Instance;
void Awake()
{
Instance = this;
}
#endregion
void Start()
{
PrepareMissiles();
StartCoroutine(SpawnMissiles());
}
IEnumerator SpawnMissiles()
{
for (int i = 0; i < missileCount;i++)
{
Debug.Log("Object set as active");
missiles[i].SetActive(true);
yield return new WaitForSeconds(spawnDelay);
}
}
void PrepareMissiles()
{
missiles = new GameObject[missileCount];
int prefabsCount = missilePrefabs.Length;
for (int i = 0; i < missileCount; i++)
{
missiles[i] = Instantiate(missilePrefabs[Random.Range(0, prefabsCount )]);
missiles[i].SetActive(false);
}
}
}
【问题讨论】:
-
你没有发布脚本,它会很有用!