| Как проверить столкновения | 
|  | 
| 
| beril | Дата: Четверг, 22 Октября 2015, 23:59 | Сообщение # 1 |  |   Я не ленивый, я — энергосберегающий Сейчас нет на сайте | В общем ребята выручайте голова уже не варит, а нужно доделывать. Наверно ответ очень прост, но я его не вижу %) 
 Нужно проверить столкнулся ли обьект с другим обьектом в классе без MonoBehavior(я отметил в каком месте)
 
 В общем есть код
 
 Код public class FireMagicClotFire : BaseSpellData, IDamageSpellType
 {
 
 private const string SPELL_POINT_NAME = "CreateSpellPoint";//имя обьекта, в позиции которого создаются обьекты заклинаний
 private const float VELOCITY = 3.3f;//скорость полета снаряда
 private const float DISTANCE = 5f;//дистанция, которую пролетает заклинание
 
 public SpellDamageType SpellDamageType
 {
 get { return SpellDamageType.FireDamage; }
 }
 
 public int Damage { get; set; }//урон наносимый заклинанием
 
 private readonly GameObject _player;//игрок
 private readonly GameObject _spellLoadModel;//модель заклинания
 
 private  Transform _spellPoint;//точка где создаются обьекты заклинаний
 
 private GameObject _spellObj;//
 private Vector3 _starPos;
 
 public FireMagicClotFire()
 {
 _player = GameObject.FindGameObjectWithTag(ManagerTag.Player);
 _spellLoadModel = Resources.Load<GameObject>("MagicSpellObject/FireClotObj") as GameObject;
 }
 
 public void Initialization()
 {
 //поиск обьекта CreateSpellPoint
 foreach (var trans in _player.transform.Cast<Transform>().Where(trans => trans.name == SPELL_POINT_NAME))
 {
 _spellPoint = trans;
 Debug.Log(trans.name);
 }
 
 if (_spellPoint == null && GeneraGameSetting._GeneraGameSetting.BuildVersion == BuildVersion.Debug)
 DebugConsole.Log(string.Format("[FireMagicClotFire] Не найден обьект CreateSpellPoint"), 3);
 //создание обьекта
 if (_spellPoint != null)
 _spellObj = InstantiateObject.InstantiateGameObject(_spellLoadModel, _spellPoint.position, Quaternion.LookRotation(_player.transform.TransformDirection(Vector3.forward)));
 
 _starPos = _spellObj.transform.position;
 
 CoroutineStart.StartCoroutineStatic(GameObject.FindObjectOfType<MonoBehaviour>(), moved(_spellObj));
 }
 
 //движение к цели
 private IEnumerator moved(GameObject obj)
 {
 while ((_starPos - obj.transform.position).sqrMagnitude <  DISTANCE * DISTANCE)
 {
 //дебаг луч
 Debug.DrawRay(obj.transform.position, obj.transform.TransformDirection(Vector3.forward) * 10, Color.red);
 
 >>>>>>>>>>>>>>>>здесь нужно как то проверку столкновения сделать, что то типа obj.OnCollisionEnter<<<<<<<<<<<<<<<<<<<<
 
 obj.transform.Translate(Vector3.forward * VELOCITY * Time.deltaTime, Space.Self);
 
 yield return null;
 }
 
 GameObject.Destroy(obj);
 }
 }
 
 
   
   Накодил? Убери за собой!
 Инвентарь в Unity(UI)
 Инвентарь в Unity(GUI)
 |  |  |  |  | 
| 
| irinautkina | Дата: Пятница, 23 Октября 2015, 00:08 | Сообщение # 2 |  |   участник Сейчас нет на сайте | прости, может я не по теме, я проверяю столкновения в юнити двумя видами либо 
 эвент
 
 OnTriggerEnter2D(Collider2D col)
 
 либо через функцию
 
 Raycast (
 
 другие способы мне не известны.
 |  |  |  |  | 
| 
| Pocifik | Дата: Пятница, 23 Октября 2015, 02:03 | Сообщение # 3 |  | участник Сейчас нет на сайте | beril, ну в принципе ничто не мешает написать OnCollisionEnter и добавлять в коллекцию, все объекты которые в входят в коллизию, а в OnCollisionExit удалять их. Затем просто вызывать где тебе надо, функцию Contains коллекции, для твоего объекта, или какой нибудь аналог. |  |  |  |  | 
| 
| shizofren | Дата: Пятница, 23 Октября 2015, 12:00 | Сообщение # 4 |  |   Starting MS-DOS... Сейчас нет на сайте | beril, если предоставленный тобою класс один на сцене, можно поступить так: 
 
 Повесить на объекты, которые нужно проверять, новый MonoBehaviour класс с методом OnCollisionEnter (или подобный).
Создать в твоем чудо-классе публичный метод, который будет вызываться при нужных коллизиях (с нужными тебе аргументами).
В классе объекта (MonoBehaviour) в методе OnCollision... проверять столкновение, и если случилось то столкновение, которое тебе нужно - вызывать тот самый публичный метод в твоем классе.
 
 Моя команда
 |  |  |  |  | 
| 
| Storm54 | Дата: Пятница, 23 Октября 2015, 13:50 | Сообщение # 5 |  |   постоянный участник Сейчас нет на сайте | Подробней можно узнать? Что из себя представляет объект? Если луч, то естественно райкастом проверять, если же какой-то примитив, то можно overlap заюзать (а можно вообще написать тригонометрией)
 |  |  |  |  | 
|  |