Получение ссылок на оба объекта столкновения - Форум Игроделов
Вт, 04 Фев 2025, 03:00 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Получение ссылок на оба объекта столкновения
VolkOrievithДата: Пт, 21 Фев 2014, 10:45 | Сообщение # 1
Нет аватара
 
Сообщений: 222
Награды: 0
Репутация: 53
Статус: Offline
Дело вот в чем:
Допустим, что на сцене есть объект под названием "Х" с 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".
 
СообщениеДело вот в чем:
Допустим, что на сцене есть объект под названием "Х" с 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".

Автор - VolkOrievith
Дата добавления - 21 Фев 2014 в 10:45
HunjethДата: Пт, 21 Фев 2014, 12:43 | Сообщение # 2
 
Сообщений: 354
Награды: 1
Репутация: 112
Статус: Offline
Примерно так

Код

var CollisionObject1 : GameObject;
var CollisionObject2 : GameObject;

function OnCollisionEnter(collision : Collision) {
  if (collision.gameObject.name == "Y")
   CollisionObject1 = collision.gameObject;
   else if (collision.gameObject.name == "W")
   CollisionObject2 = collision.gameObject;
}

function Update() {
  CollisionObject1 = null;
  CollisionObject2 = null;
  //Если rigidbody не двигать то он перестанет реагировать
  rigidbody.WakeUp();
}

/////////////////////////////////////

//Это проверочный скрипт он ищет все объекты
import System.Collections.Generic;

var detectedObjects : List.<GameObject> = new List.<GameObject>();

function OnCollisionStay(collision : Collision) {
  detectedObjects.Add(collision.gameObject);
}

function Update() {
  detectedObjects.Clear();
  rigidbody.WakeUp();
}


Сообщение отредактировал Hunjeth - Пт, 21 Фев 2014, 12:46
 
СообщениеПримерно так

Код

var CollisionObject1 : GameObject;
var CollisionObject2 : GameObject;

function OnCollisionEnter(collision : Collision) {
  if (collision.gameObject.name == "Y")
   CollisionObject1 = collision.gameObject;
   else if (collision.gameObject.name == "W")
   CollisionObject2 = collision.gameObject;
}

function Update() {
  CollisionObject1 = null;
  CollisionObject2 = null;
  //Если rigidbody не двигать то он перестанет реагировать
  rigidbody.WakeUp();
}

/////////////////////////////////////

//Это проверочный скрипт он ищет все объекты
import System.Collections.Generic;

var detectedObjects : List.<GameObject> = new List.<GameObject>();

function OnCollisionStay(collision : Collision) {
  detectedObjects.Add(collision.gameObject);
}

function Update() {
  detectedObjects.Clear();
  rigidbody.WakeUp();
}

Автор - Hunjeth
Дата добавления - 21 Фев 2014 в 12:43
VolkOrievithДата: Пт, 21 Фев 2014, 13:23 | Сообщение # 3
Нет аватара
 
Сообщений: 222
Награды: 0
Репутация: 53
Статус: Offline
Hunjeth, Благодарю за новый для меня метод, но здесь не указано, как узнать, какой из двух объектов "Y" или "Z" столкнулся с объектом "W". Еще раз напоминаю, что ни на "Y" ни на "Z" нет rigidbody. Оно есть на родительском объекте "X". Там же и скрипт.
 
СообщениеHunjeth, Благодарю за новый для меня метод, но здесь не указано, как узнать, какой из двух объектов "Y" или "Z" столкнулся с объектом "W". Еще раз напоминаю, что ни на "Y" ни на "Z" нет rigidbody. Оно есть на родительском объекте "X". Там же и скрипт.

Автор - VolkOrievith
Дата добавления - 21 Фев 2014 в 13:23
HunjethДата: Пт, 21 Фев 2014, 16:23 | Сообщение # 4
 
Сообщений: 354
Награды: 1
Репутация: 112
Статус: Offline
Ты не можешь получить столкновение объектов "Y" и "W" в скритпе "X".
Без rigidbody на объектах "Y" и "W".
Если там будет rigidbody то надо еще 1 скрипт который будет отправлять объекту "X" столкновения.

Напиши что ты хочешь сделать а то не особо понятно зачем тебе это.


Сообщение отредактировал Hunjeth - Пт, 21 Фев 2014, 19:36
 
СообщениеТы не можешь получить столкновение объектов "Y" и "W" в скритпе "X".
Без rigidbody на объектах "Y" и "W".
Если там будет rigidbody то надо еще 1 скрипт который будет отправлять объекту "X" столкновения.

Напиши что ты хочешь сделать а то не особо понятно зачем тебе это.

Автор - Hunjeth
Дата добавления - 21 Фев 2014 в 16:23
VolkOrievithДата: Пт, 21 Фев 2014, 18:48 | Сообщение # 5
Нет аватара
 
Сообщений: 222
Награды: 0
Репутация: 53
Статус: Offline
Короче говоря, у меня автомобиль. Ригидюоди на одном, коллайдеры на других, дочерних объектах. Надо, при столкновении считать урон: бампер - допустим -10хп. борт -- -20хп и т.д...
 
СообщениеКороче говоря, у меня автомобиль. Ригидюоди на одном, коллайдеры на других, дочерних объектах. Надо, при столкновении считать урон: бампер - допустим -10хп. борт -- -20хп и т.д...

Автор - VolkOrievith
Дата добавления - 21 Фев 2014 в 18:48
HunjethДата: Пт, 21 Фев 2014, 19:42 | Сообщение # 6
 
Сообщений: 354
Награды: 1
Репутация: 112
Статус: Offline
Ты так и пиши, а то понаписал блин не понятно что тебе надо.

вот пример :
"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
 
СообщениеТы так и пиши, а то понаписал блин не понятно что тебе надо.

вот пример :
"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 в 19:42
VolkOrievithДата: Пт, 21 Фев 2014, 21:47 | Сообщение # 7
Нет аватара
 
Сообщений: 222
Награды: 0
Репутация: 53
Статус: Offline
Внимательно посмотрел скрипт. Понял принцип, но не нашел той строки, которая определяет, чем все таки машина "долбанулась". dry
Если есть - ткни пожалуйста носом smile
 
СообщениеВнимательно посмотрел скрипт. Понял принцип, но не нашел той строки, которая определяет, чем все таки машина "долбанулась". dry
Если есть - ткни пожалуйста носом smile

Автор - VolkOrievith
Дата добавления - 21 Фев 2014 в 21:47
HunjethДата: Пт, 21 Фев 2014, 22:46 | Сообщение # 8
 
Сообщений: 354
Награды: 1
Репутация: 112
Статус: Offline
там 2 скрипта раздели их
скрипт "CarDamageScript" только на машину добавь
а "CarDamage" вешай на части от машины он и будет определять.

там есть параметр
Цитата
var type : Type = 0;

который отвечает за тип модели (бампер, дверь)

если тебе нужен конкретный объект добавь его сам
Код
carDamageScript.TakeDamage(type, sub, collision.gameObject);

Код
public function TakeDamage(tt : CarDamage.Type, dmg : float, gm : GameObject) {


Сообщение отредактировал Hunjeth - Пт, 21 Фев 2014, 22:52
 
Сообщениетам 2 скрипта раздели их
скрипт "CarDamageScript" только на машину добавь
а "CarDamage" вешай на части от машины он и будет определять.

там есть параметр
Цитата
var type : Type = 0;

который отвечает за тип модели (бампер, дверь)

если тебе нужен конкретный объект добавь его сам
Код
carDamageScript.TakeDamage(type, sub, collision.gameObject);

Код
public function TakeDamage(tt : CarDamage.Type, dmg : float, gm : GameObject) {

Автор - Hunjeth
Дата добавления - 21 Фев 2014 в 22:46
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2025