Как определить "выпавшую" сторону после броска кубика

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Как определить "выпавшую" сторону после броска кубика

Сообщение iGefest 23 мар 2017, 12:37

Всем привет. Опять в тупике. Есть модель игральной кости (1d6). К нему прикреплен скрипт броска:
Синтаксис:
Используется csharp
using System.Collections;
using UnityEngine;

public class ApplyForceInRandomDirection : MonoBehaviour
{
        public string buttonName = "Fire1";
        public float forceAmount = 10.0f;
        public float torqueAmount = 10.0f;
        public ForceMode forceMode;
        // Update is called once per frame
        void Update ()
        {
                Rigidbody rb = GetComponent<Rigidbody> ();
                if (Input.GetButtonDown (buttonName))
                {
                        rb.AddForce(Random.onUnitSphere * forceAmount, forceMode);
                        rb.AddTorque(Random.onUnitSphere * torqueAmount, forceMode);
                }
                       
        }
}
 


Изображение

Нужно определить какая сторона выпала и вывести ее в консоль. Видел много где реализацию такого вида:
Синтаксис:
Используется csharp
if (Vector3.Dot (transform.forward, Vector3.up) &gt; 1)
diceCount = 5;
if (Vector3.Dot (-transform.forward, Vector3.up) &gt; 1)
diceCount = 2;
if (Vector3.Dot (transform.up, Vector3.up) &gt; 1)
diceCount = 3;
if (Vector3.Dot (-transform.up, Vector3.up) &gt;1)
diceCount = 4;
if (Vector3.Dot (transform.right, Vector3.up) &gt;1)
diceCount = 6;
if (Vector3.Dot (-transform.right, Vector3.up) &gt;1)
diceCount = 1;
Debug.Log ("diceCount :" + diceCount);

 


Но так и не смог понять ее принцип работы и как заставить его работать.
Собственно вопрос каким образом можно считать выпавшую грань и что гуглить. Спасибо.
iGefest
UNец
 
Сообщения: 27
Зарегистрирован: 01 мар 2017, 09:16

Re: Как определить "выпавшую" сторону после броска кубика

Сообщение ikhtd 23 мар 2017, 12:57

нужно вешать какой то признак на каждую грань, к примеру рейкаст. например такой алгоритм- не определять ту которая выпала, а определять противоположную грань с помощью рейкаста. это единственная грань которая имеет контакт с полом. рейкаст конечно ставить не в апдейте, запускать его только по признаку когда кубик полностью остановил движение - лег на пол. в этот момент считывать касается ли грань кубика к полу. на пол назначить какой то таг и определять касается ли рейкаст объекта с тагом. определили ту которая касается пола - значит выпала противоположная.
не знаю может есть какой алгоритм получше- это я сам выдумал. кстати можно не рекаст а тригеры на грани - так меньше возни.
Скрытый текст:
Объективная реальность это - что в жизни не может быть более одного пути, который в свою очередь обусловлен максимальным существующим давлением. (второй _ttp://habrahabr.ru/post/202654/)
ikhtd
Адепт
 
Сообщения: 1124
Зарегистрирован: 24 мар 2014, 12:20

Re: Как определить "выпавшую" сторону после броска кубика

Сообщение Tolking 23 мар 2017, 13:13

Не понял т.к. не знаешь, что такое Дот продукт и когда он равен 1...
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2716
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Как определить "выпавшую" сторону после броска кубика

Сообщение MANMANA 23 мар 2017, 13:14

Ориентация 3д объекта в пространстве задается тремя координатами по трем осям, в частности transform.forward, transform.up и transform.right определяет локальные направления лицевой, верхней и боковой поверхностей объекта.
Vector3.up и т.д. - направление мировых координат.
Vector3.Dot позволяет сравнить направление двух векторов (направлений объекта), например, transform.up и Vector3.up.
В приведенном вами примере сравниваются различные варианты ориентации/направления сторон объекта (transform.right и Vector3.up, transform.up и Vector3.up и т.д.), достаточных для определения того, какой стороной кубик направлен/повернут (up, forward, right), причем, в данном случае, достаточным является сравнение up и forward в нескольких комбинациях.
p.s. -transform.up это такой себе "transform.down"
_3dbuffer.com
MANMANA
UNIверсал
 
Сообщения: 475
Зарегистрирован: 31 июл 2014, 10:32
Откуда: Moscow
  • Сайт


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 26