avatar

Создание простейшего взрыва

опубликовал в Unity3D
Привет всем. Я расскажу как создать взрыв в Unity, в интернете не особо много информации как это сделать да и есть Detonator, а он хорош. Но я всё же решил рассказать как сделать взрыв в Unity. И так, начнём.

Создаём C# скрипт с любым названием, к примеру «Boom». Теперь добавим переменные:
public float explosionRadius = 5;// радиус поражения
public float power = 500;// сила взрыва
private Rigidbody[] physicObject;// тут будут все физ. объекты которые есть на сцене

Затем идём в void Start()(void Update можно убрать) и записываем объекты которые имеют физику(Rigidbody) на сцене.
physicObject = FindObjectsOfType(typeof(Rigidbody)) as Rigidbody[];// Записываем все физ. объекты

После нам нужно всем объектам добавить силу которая заставит их отлетать, сделаем это через цикл.
for(int i = 0; i < physicObject.Length; i++){
}

Теперь нужно проверить объект в зоне поражения или нет, для этого в цикл добавляем проверку дабы не обрабатывать то что не надо.
for(int i = 0; i < physicObject.Length; i++){
if(Vector3.Distance(transform.position,physicObject[i].transform.position) <= explosionRadius){
}
}

Эта проверка будет проверять как далеко он эпицентра объект. Теперь добавим саму силу которая будет отталкивать объект с силой «power» в радиусе «explosionRadius» от точки «transform.position». Делаем это с помощью функции в Rigidbody AddExplosionForce. И получается что-то такое:
for(int i = 0; i < physicObject.Length; i++){
if(Vector3.Distance(transform.position,physicObject[i].transform.position) <= explosionRadius){
physicObject[i].AddExplosionForce(power,transform.position,explosionRadius);
}
}

И вообщем скрипт обретает такой вид:
using UnityEngine;
using System.Collections;

public class Boom : MonoBehaviour {
	
	public float explosionRadius = 5;// радиус поражения
	public float power = 500;// сила взрыва	
	
	private Rigidbody[] physicObject;// тут будут все физ. объекты которые есть на сцене
	
	void Start(){
		physicObject = FindObjectsOfType(typeof(Rigidbody)) as Rigidbody[];// Записываем все физ. объекты
		for(int i = 0; i < physicObject.Length; i++){
			if(Vector3.Distance(transform.position,physicObject[i].transform.position) <= explosionRadius){// Исключаем от обработки объекты которые достаточно далеко от взвыва
				physicObject[i].AddExplosionForce(power,transform.position,explosionRadius);// Создание взрыва, с силой power, в позиции transform.position, c радиусом explosionRadius
			}
		}
	}
}

Для применения достаточно скрипт повесить на пустышку и при запуске произойдет взрыв и объекты разлетятся. Скачать проект можно тут
Спасибо за внимание, удачи в создании игр. =)
+7
0
11572
  • 0 комментариев

    Чтобы оставить комментарий необходимо .