我是Unity 3D的新手。我已经创建了一个游戏对象(导弹),位置为 x:-1 y:-3 z:0 添加了一个组件脚本,使球向上移动。将其保存为预制件。然后从场景中删除游戏对象。
使用的组件脚本
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);
}
}
}
改变这个。
missiles[i] = Instantiate(missilePrefabs[Random.Range(0, prefabsCount )]);
改成
missiles[i] = Instantiate(missilePrefabs[Random.Range(0, prefabsCount )], <vector3position>, <quaternionrotation>);
并指定它的位置和旋转,只需将 vector3position 替换为你选择的 vector3,将 quaternionrotation 替换为你选择的 quaternion rotation。如果你不想要任何旋转,你可以使用Quaternion.Identity。如果你也可以选择添加一个父函数。
missiles[i] = Instantiate(missilePrefabs[Random.Range(0, prefabsCount )], <vector3position>, <quaternionrotation>, <transformparent>);
只要用你想成为子弹父体的gameobject替换transformparent即可,如果这个覆盖能证明对你有用的话。
更多关于Object.Instantiate的阅读
https:/docs.unity3d.comScriptReferenceObject.Instantiate.html。