Замена объекта при столкновении.
|
|
xxxlio | Дата: Четверг, 30 Июня 2016, 19:26 | Сообщение # 1 |
частый гость
Сейчас нет на сайте
| Помню находил на этом форуме небольшой скрипт. Кто знает, напишите, пожалуйста. Скрипт превращает один объект в другой при столкновении. В нем есть 1 публичная переменная. Вешаешь этот скрипт, к примеру на куб, переменную вставляешь сферу. при ударе или выстреле по кубу, он превращается в сферу. Напишите скрипт целиком, очень нужно.
|
|
| |
Lertmind | Дата: Четверг, 30 Июня 2016, 20:56 | Сообщение # 2 |
заслуженный участник
Сейчас нет на сайте
| Это же элементарно, в OnTriggerEnter() или OnCollisionEnter() делается Instantiate() объекта из переменной и удаляется сам объект через Destroy().
|
|
| |
xxxlio | Дата: Четверг, 30 Июня 2016, 21:00 | Сообщение # 3 |
частый гость
Сейчас нет на сайте
| Цитата xxxlio ( ) Это же элементарно, в OnTriggerEnter() или OnCollisionEnter() делается Instantiate() объекта из переменной и удаляется сам объект через Destroy(). Я скрипты еще плохо знаю, напишите пожалуйста целиком. И если можно добавить 2 публичных переменных. 1 во что превращаеться, а вторую при столкновении с каким объектом. Буду очень признателен.
|
|
| |
Lertmind | Дата: Четверг, 30 Июня 2016, 21:19 | Сообщение # 4 |
заслуженный участник
Сейчас нет на сайте
| Что ты хочешь во второй переменной? Строка с именем объекта, строка с тегом объекта, конкретный объект на сцене?
Добавлено (30 июня 2016, 21:19) --------------------------------------------- Без второй переменной скрипт выглядит так:
Код using UnityEngine;
public class Transformation : MonoBehaviour { public GameObject SwapObject;
void OnCollisionEnter(Collision other) { Instantiate(SwapObject, transform.position, Quaternion.identity); Destroy(gameObject); } } Предполагается, что у объекта, который врезается есть Rigidbody (с отключенным isTrigger и отключенным isKinematic), а у объекта который превращается есть как минимум Collider с отключенным isTrigger. Хотя сам решишь как они врезаются, главное знай когда происходит OnCollisionEnter().
Сообщение отредактировал Lertmind - Четверг, 30 Июня 2016, 21:23 |
|
| |
xxxlio | Дата: Четверг, 30 Июня 2016, 22:44 | Сообщение # 5 |
частый гость
Сейчас нет на сайте
| Цитата Lertmind ( ) Что ты хочешь во второй переменной? Строка с именем объекта, строка с тегом объекта, конкретный объект на сцене? Спасибо, большое, именно его я искал. Во второй переменной я хотел добавить 2 предмет с которым сталкивается. К примеру, есть дерево, куда мы вешаем скрипт. В скрипт вставляем бревно, во что оно превратиться после того как его срубят топором, то есть 2 соприкасающимся предметом. Во вторую переменную я хотел вставить топор. То есть, если дерево столкнется с чем то еще, то замены не будет. скрипт должен действовать только на конкретный предмет столкновения. И получатся, если дерево сталкивается с топором, оно превращается в бревно, а если с чем то еще, то ничего не происходит. Можно этот скрипт как то доделать?
|
|
| |
Lertmind | Дата: Четверг, 30 Июня 2016, 23:54 | Сообщение # 6 |
заслуженный участник
Сейчас нет на сайте
| Я не это спросил, по второму предложению можно было понять, что говорится про то, каким образом ты хочешь задавать другой объект.
Судя по всему, ты хочешь сделать майнкрафт, тогда таким образом будет глупо делать. В майнкрафте ресурсы "выпадают", а не "превращаются", соответственно внешне должно выглядеть по-другому, и там не проверяется столкновение, а скорее всего просто рассчитывается воображаемое расстояние инструмента в руке и на основе этого определяется подвергается ли предмет действию, при этом анимация инструмента для красоты и нет на нём коллайдеров, если только для особых случаев или в реалистичных играх.Добавлено (30 июня 2016, 23:54) --------------------------------------------- В общем, вот скрипт с тегом:
Код using UnityEngine;
public class Transformation : MonoBehaviour { public GameObject SwapObject; public string CollisionTag;
void OnCollisionEnter(Collision other) { if (other.gameObject.CompareTag(CollisionTag)) { Instantiate(SwapObject, transform.position, Quaternion.identity); Destroy(gameObject); } } } Задаёшь например тег "Axe" во втором свойстве и у топора ставишь тег "Axe".
Сообщение отредактировал Lertmind - Четверг, 30 Июня 2016, 23:35 |
|
| |
xxxlio | Дата: Пятница, 01 Июля 2016, 12:05 | Сообщение # 7 |
частый гость
Сейчас нет на сайте
| Цитата Lertmind ( ) Задаёшь например тег "Axe" во втором свойстве и у топора ставишь тег "Axe". Задал второй тег Axe и у дерева и у топора. В скрипте на против Collision Tag так же поставил Axe. Скрипт не работает и выдает ошибку Tag: Axe is not defined! Что я делаю не так? На обоих предметах висит бокс колайдер и риджибоди.Добавлено (01 июля 2016, 12:05) --------------------------------------------- Вот если в тег скрипта вписывать первый тег, например respawn и у топора первый тег вписать такой же, тогда все работает.
|
|
| |
Lertmind | Дата: Пятница, 01 Июля 2016, 17:39 | Сообщение # 8 |
заслуженный участник
Сейчас нет на сайте
| xxxlio, мне показалось или у топора ты добавил скрипт тоже? Не надо. Под "задаёшь тег Axe во втором свойстве" имеется в виду написание ручками строки "Axe" в свойстве, а "у топора ставишь тег Axe" - добавляешь тег в Tag Manager и выбираешь из списка тегов у GameObject топора. Я не думал, что про теги ты тоже ничего не знаешь. В общем изучай материалы по основам Unity.
|
|
| |