Ни один объект не был создан, потому что у вас, вероятно, нет ресурса с именем Orbparticle
. Проверьте, есть ли у вас ошибки при запуске вашего скрипта. Если Resources.Load не найдет нужный объект по указанному вами пути, он выдаст null
, что, вероятно, объясняет, почему ни один объект не создается.
Если вы хотите стрелять в частицу вместо меша, вам нужно установить prefab
для GameObject, который вы подготовили заранее, с необходимой вам ParticleSystem. Я бы рекомендовал не использовать Resources.Load для этого.
1. Использование Resources.Load.
Измените свой код на этот, чтобы он предупреждал вас, если не находит ресурс:
GameObject prefab;
// Use this for initialization
void Start () {
string name = "OrbParticle";
prefab = Resources.Load<GameObject>(name);
if (prefab == null) {
Debug.Error("Resource with name " + name + " could not be found!");
}
}
// Update is called once per frame
void Update() {
if (Input.GetMouseButtonDown(0))
{
GameObject projectile = Instantiate(prefab) as GameObject;
projectile.transform.position = transform.position + Camera.main.transform.forward * 2;
Rigidbody rb = projectile.GetComponent<Rigidbody>();
rb.velocity = Camera.main.transform.forward * 40;
}
}
Теперь, чтобы это работало, вам нужен префаб с именем "OrbParticle" или любая другая строка, для которой вы устанавливаете переменную name
. Resources.Load ищет элементы в путях, таких как Assets/Resources
. Таким образом, вы ДОЛЖНЫ иметь префаб "OrbParticle", расположенный в этой папке ресурсов. Если у вас нет конкретной причины для использования Resources.Load, я настоятельно рекомендую вам воспользоваться решением 2.
2. Отключение ресурсов. Загрузка и непосредственное использование префаба.
Измените свой код на это:
public GameObject prefab;
// Update is called once per frame
void Update() {
if (Input.GetMouseButtonDown(0))
{
GameObject projectile = Instantiate(prefab) as GameObject;
projectile.transform.position = transform.position + Camera.main.transform.forward * 2;
Rigidbody rb = projectile.GetComponent<Rigidbody>();
rb.velocity = Camera.main.transform.forward * 40;
}
}
Тогда сделайте это:
- Создайте новый пустой GameObject.
- Подключите ParticleSystem к GameObject.
- Создайте новый сборный актив.
- Перетащите только что созданный GameObject в актив Prefab.
- Перетащите префаб в поле
prefab
в Monobehaviour (объект, выполняющий съемку. Он будет иметь заранее подготовленное поле в Инспекторе. Вот почему мы устанавливаем prefab
в качестве открытого поля).
Если у вас продолжают возникать проблемы, загляните в Иерархию Unity, чтобы увидеть, создается ли вообще никакой объект. Возможно, это тот случай, когда он создает экземпляр GameObject, но GameObject по какой-то причине невидим или не создается в ожидаемом вами месте.