forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   следование объекта за мышью (http://forum.boolean.name/showthread.php?t=17064)

Taugeshtu 24.07.2012 01:05

Ответ: следование объекта за мышью
 
Цитата:

Каким образом сделать коллайдеры восприимчивыми к мышке, а объект заставить игнорировать Лучи?
LayerMask
Это особое, магическое число, используемое для выбора слоёв для райкаста. Допустим, создадим новый слой, и будет он у нас иметь индекс 11 (ну так, навскидку... от 0 до 7 слои стандартные идут, встроенные)
Тогда магическое число, нужное нам, будет:
var _layer_mask = 1 << 11;
Операция " << 11" - это битовый сдвиг на 11 знаков. Если не знаешь двоичную систему счисления - не грузись.
Но сейчас в _layer_mask находится ТОЛЬКО 11 слой. Если мы, допустим, не хотим в 11 слой совать все объекты, по которым нужно пройтись райкастом, а хотим в 11 слой засунуть все объекты, по которым НЕ нужно райкастить, нам надо инвертировать маску. Делается так:
_layer_mask ~= _layer_mask;

А потом эту переменную _layer_mask применяем в райкасте. Всё.

Huruffus 24.07.2012 01:33

Ответ: следование объекта за мышью
 
Taugeshtu, спасибо, ели понял :)

Цитата:

Операция " << 11" - это битовый сдвиг на 11 знаков. Если не знаешь двоичную систему счисления - не грузись.
Двоичную систему счисления я знаю (00, 01, 10, 11, ...). Или это не всё?
"<< 11" - нужно применять всегда? Нельзя просто написать "_laer_masl = 11"?

Taugeshtu 24.07.2012 01:49

Ответ: следование объекта за мышью
 
Нельзя. Потому что _layer_mask = 11 даст тебе в двоичной системе:
000....01011
Т.е. такая маска будет включать слои с индексами 0, 1, и 3.
По сути, что мы делаем (если делаем правильно):
Приравниваем _layer_mask = 1.
Получаем:
000.....0001
А потом сдвигаем эту еденицу влево 11 раз, и получаем:
0000...0100000000000
Таким образом мы имеем в маске слой с индексом 11.

Huruffus 24.07.2012 02:07

Ответ: следование объекта за мышью
 
А как заставить объект игнорировать только один коллайдер?

В моём случае камера выпускает луч, источником которого является указатель (мышка). Луч попадает в стену. В ту точку, куда попал луч, перемещается объект (Колба). Но так как колба имеет коллайдер, и стена тоже, колба бьётся об стену некоторое время и улетает далеко далеко.

Как заставить колбу игнорировать столкновения только со стеной?

Taugeshtu 24.07.2012 02:09

Ответ: следование объекта за мышью
 
Цитата:

Как заставить колбу игнорировать столкновения только со стеной?
Edit -> Project settings -> Physics
Там найдёшь Layers collision matrix, ну а дальше, думаю, разберёшься. Опять слои) Слои - карашо.

Huruffus 24.07.2012 02:14

Ответ: следование объекта за мышью
 
Слои - очень карашо!

добавил:
но я отыскал способ по-лучше: Physic.IgnoreCollision
http://docs.unity3d.com/Documentatio...Collision.html

добавил:
нет он не лучше, т.к. придётся прописывать это для каждого коллайдера в отдельности, а у меня их несколько в одном.
Ваш способ определённо лучше;)

Huruffus 24.07.2012 18:45

Ответ: следование объекта за мышью
 
Какой функцией можно возвратить текущую позицию?
И как сместить центр объекта в Unity?

Taugeshtu 24.07.2012 19:00

Ответ: следование объекта за мышью
 
Именно возвратить? Куда?)

Вообще, текущая позиция - вот она:
gameObject.transform.position
Не ленись чуть дольше лазить по справке.

Huruffus 25.07.2012 13:49

Ответ: следование объекта за мышью
 
я сделал так gameObject.transform.position = _hit.point, теперь трансформ позишен не является текущим положением.

а с проблемой я уже разобрался

pax 25.07.2012 14:16

Ответ: следование объекта за мышью
 
Делаешь поле
Vector3 originalPosition;
и перед строчкой gameObject.transform.position = _hit.point
пишешь originalPosition = gameObject.transform.position;
потом до следующего каста делаешь с originalPosition что тебе нужно.

Huruffus 07.08.2012 19:17

Ответ: следование объекта за мышью
 
Всем привет!

измеряю дистанцию до объекта и в зависимости от заданной дистанции пишу "можно взять", "не возможно взять".

когда я отхожу от объекта выводит "не возможно взять", а когда подхожу к объекту, то надпись не меняется. Почему, скажите пожалуйста? Объект в сцене один.

Код:

public class takeObject : MonoBehaviour {
        public GameObject takeObj;
       
        void Start () {
        takeObj = GameObject.FindWithTag("canTake");
        }
       
        // Update is called once per frame
        void Update () {
        if (Vector3.Distance(takeObj.transform.position, gameObject.transform.position)<5)
                        print ("can take it");
                        else print ("can't take it");       
        }
}


pax 07.08.2012 19:40

Ответ: следование объекта за мышью
 
Сколько таких объектов на сцене? Может быть другой в лог пишет что нельзя его взять?

Huruffus 07.08.2012 19:42

Ответ: следование объекта за мышью
 
Объект в сцене один.

pax 07.08.2012 19:47

Ответ: следование объекта за мышью
 
Я бы посмотрел на реальные координаты этих двух объектов, между которыми замеряется расстояние. Не иначе дело не чистое))

Huruffus 07.08.2012 19:53

Ответ: следование объекта за мышью
 
изначально персонаж стоит около куба.
Написало "можно". когда отошёл, написало "нельзя", когда подошёл, надпись не изменилась

если передвинуть куб, то получается наоборот:
Написало "нельзя".когда подошёл, написало "можно", когда отходишь, надпись не меняется.


Часовой пояс GMT +4, время: 02:07.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot