Суббота, 30 Ноября 2024, 01:12

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Масштабирование дочернего объекта
Valik_FenkoДата: Понедельник, 20 Июня 2016, 11:44 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Сделал стрельбу из лука.
На стреле висит скрипт который удочеряет стрелу к объекту в который она попала выключая физику.(Растревание в целе короче если)
Но проблема в том что когда стрела застревает в объекте у которого scale не равен 1,то стрела начинает растягиваться.Как это можно исправить?
SkorpyXДата: Понедельник, 20 Июня 2016, 15:06 | Сообщение # 2
участник
Сейчас нет на сайте
Рекурсивно делить localScale объекта на localScale родителя

Сообщение отредактировал SkorpyX - Понедельник, 20 Июня 2016, 15:27
LertmindДата: Понедельник, 20 Июня 2016, 16:39 | Сообщение # 3
заслуженный участник
Сейчас нет на сайте
Valik_Fenko, смотрим внимательнее Transform.SetParent:
Код
public void SetParent(Transform parent, bool worldPositionStays);
Если передать вторым параметром true, то будет оставаться позиция, поворот и масштаб, какой был, а точнее относительно мировых координат.


Сообщение отредактировал Lertmind - Понедельник, 20 Июня 2016, 16:43
Valik_FenkoДата: Вторник, 21 Июня 2016, 23:48 | Сообщение # 4
почетный гость
Сейчас нет на сайте
Ещё вопрос.Есть стрела,и иногда когда она попадает в цель - она проелтает через неё и только после этого вырубается физика.. =(.В итоге стрела прикреплена к стене или к чуваку в воздухе.Как это можно исправить?
LertmindДата: Среда, 22 Июня 2016, 08:42 | Сообщение # 5
заслуженный участник
Сейчас нет на сайте
Valik_Fenko, могу придумать только костыль: хранить предыдущие позиции стрелы и восстанавливать их. Вообще есть несколько факторов, надо разбираться.

Сообщение отредактировал Lertmind - Среда, 22 Июня 2016, 08:42
Valik_FenkoДата: Среда, 22 Июня 2016, 11:12 | Сообщение # 6
почетный гость
Сейчас нет на сайте
а подробней?я какт и не особо понял
LertmindДата: Среда, 22 Июня 2016, 14:13 | Сообщение # 7
заслуженный участник
Сейчас нет на сайте
Valik_Fenko, думал примерно так: сохраняешь предыдущую позицию в Update() или FixedUpdate(), возможно несколько последних, а когда стрела врезается проверяешь насколько соответствует позиция, например узнаёшь попадает ли начало стрелы в прямоугольный параллелепипед (Collider.bounds.Contains(Vector3)), тогда восстанавливаешь предыдущую позицию. Но это всё как-то плохо получается.

Сейчас придумал вариант получше: после застревания стрелы, кидаешь луч вдоль стрелы, чтобы узнать точку пересечения и ставишь стрелу кончиком ровно в точке пересечения с коллайдером. Чтобы делать меньше вычислений, луч кидаешь через Collider.Raycast, то есть для конкретного коллайдера.

Прежде чем пробовать костыль выше, сначала убедись, что коллайдеры состоят из примитивов, использование MeshCollider стоит избегать. Если стрела очень быстрая, возможно стоит попробовать изменить свойство Collision Detection у Rigidbody, но это повлияет на производительность. Думаю есть ещё факторы.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг