Дело вот в чем: Допустим, что на сцене есть объект под названием "Х" с Rigidbody и два дочерних объекта с коллайдерами ("Y" и "Z"). А так же есть посторонний объект с коллайдером "W". На объекте "Х" висит скрипт с функцией OnCollisionEnter(collision : Collision) :
Код
var CollisionObject1 : GameObject; var CollisionObject2 : GameObject;
function OnCollisionEnter(collision : Collision) { "бла бла бла" }
Что нужно написать вместо "Бла бла бла", чтобы получить ссылки на объекты столкновения и назначить переменным CollisionObject1 и CollisionObject2 эти объекты? То есть, допустим, столкнулись объекты "Y" и "W". Скрипт это фиксирует и назначает CollisionObject1 = "Y", а CollisionObject2 = "W".
Hunjeth, Благодарю за новый для меня метод, но здесь не указано, как узнать, какой из двух объектов "Y" или "Z" столкнулся с объектом "W". Еще раз напоминаю, что ни на "Y" ни на "Z" нет rigidbody. Оно есть на родительском объекте "X". Там же и скрипт.
Ты не можешь получить столкновение объектов "Y" и "W" в скритпе "X". Без rigidbody на объектах "Y" и "W". Если там будет rigidbody то надо еще 1 скрипт который будет отправлять объекту "X" столкновения.
Напиши что ты хочешь сделать а то не особо понятно зачем тебе это.
Сообщение отредактировал Hunjeth - Пт, 21 Фев 2014, 19:36
Короче говоря, у меня автомобиль. Ригидюоди на одном, коллайдеры на других, дочерних объектах. Надо, при столкновении считать урон: бампер - допустим -10хп. борт -- -20хп и т.д...
Ты так и пиши, а то понаписал блин не понятно что тебе надо.
вот пример : "CarDamageScript" только на машину "CarDamage" на части от машины
Код
class CarDamage extends MonoBehaviour { public enum Type { bamper, dverj, car, motor } var type : Type = 0; var health : float = 100; var damageConstant : float = 0.2;
private var carDamageScript : CarDamageScript;
public function Awake() { carDamageScript = transform.root.gameObject.GetComponent(CarDamageScript); }
public function OnCollisionEnter(collision : Collision) { var veloc : float = collision.relativeVelocity.magnitude; if (veloc > 5) TakeDamage(veloc); }
public function TakeDamage(f : float) { var sub : float = f * damageConstant; if (health - sub > 0) { health -= sub; carDamageScript.TakeDamage(type, sub); }else{ health = 0; carDamageScript.TakeDamage(2, sub); //Destroy the detail } } }
class CarDamageScript extends MonoBehaviour { var health : float = 100;
public function TakeDamage(tt : CarDamage.Type, dmg : float) { switch (tt) { //bamper case 0: Sub(dmg * 0.15); break; //dverj case 1: Sub(dmg * 0.25); break; //car case 2: Sub(dmg); break; //motor case 3: Sub(dmg * 0.45); break; default: Sub(dmg); Debug.LogWarning("Damage Type Not Set."); break; } }
private function Sub(dmg : float) { if (health - dmg > 0) { health -= dmg; }else{ health = 0; //Destroy the car } } }
Сообщение отредактировал Hunjeth - Пт, 21 Фев 2014, 20:37
Внимательно посмотрел скрипт. Понял принцип, но не нашел той строки, которая определяет, чем все таки машина "долбанулась". Если есть - ткни пожалуйста носом