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=15809)

Aikon 11.11.2011 15:06

Ответ: Вопросы от новичка
 
pax, спасибо. Это больше похоже на правду :)
А как же пауза в играх реализуется? (по сути мне глобальная пауза и нужна)

Lestar 11.11.2011 15:17

Ответ: Вопросы от новичка
 
Time.timeScale=0

pax 11.11.2011 19:21

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от Lestar (Сообщение 209249)
Time.timeScale=0

Так только можно заморозить объекты, работающие в зависимости от времени.

Lestar 11.11.2011 19:47

Ответ: Вопросы от новичка
 
И..? Нужна безгеморойная пауза работайте с классом Time.Хотите изобретать велосипед -искать все обьекты в сцене и работать с каждой группой отдельно,ваше право.

pax 11.11.2011 19:54

Ответ: Вопросы от новичка
 
Через тайм не заблокируешь
PHP код:

void Update()
{
   if(
Input.MouseButtonDown(0))
   {

   }


или
PHP код:

void OnMouseButtonDown()
{



Придется в каждой функции обработчики писать.

Aikon 11.11.2011 22:08

Ответ: Вопросы от новичка
 
Надо подумать. Кажется комбинирование двух подходов поможет мне решить задачу.

Со вторым пунктом разобрался: оказалось при импорте модели из 3ds надо было поставить галку Generate Colliders.

Aikon 25.11.2011 14:51

Ответ: Вопросы от новичка
 
Еще пара вопросов.

На сцене несколько предметов, игрок может тыкнуть по любому (на всех висит один и тот же скрипт обработки) и будет отображен диалог, где игрок может выбрать один из вариантов. У каждого предмета свой диалог (варианты задаются в редакторе).

Как реализовать:
1. Допустим выбрали предмет sphere и вариант 2. Как вызвать заранее неизвестную процедуру sphere_2, т.е. Имя_НомерВарианта? Совсем хорошо, если для каждого предмета обработку ответов можно будет в отдельном файле. Как лучше сделать? (вопрос скорее всего по С#)
2. Использую Screen.cursorLock = true, но есть необходимость отслеживать, что пользователь шевелит мышью по горизонтали. Через Input.mousePosition не получается, поскольку курсор фиксированный.
Попробовал через Input.GetAxis("Mouse X"), получилось не очень. Какие еще есть способы отследить мышь?

pax 25.11.2011 15:02

1. http://unity3d.com/support/documenta...ndMessage.html
2. http://unity3d.com/support/documenta...howCursor.html обычно курсор не лочат если он двигаться должен

UPD:
А с другой стороны про движение по горизонтали:

PHP код:

Input.GetAxis("Mouse X"


Aikon 25.11.2011 15:44

Ответ: Вопросы от новичка
 
1. Оно, спасибо :)
2. Курсор залочен и скрыт, поскольку мышка используется для передвижения (не WASD, а по центру, куда игрок смотрит). Объект выбирается, если игрок на него в упор смотрит и кликает.
Кроме GetAxis и GetAxisRaw, насколько я понял, вариантов больше нет?

pax 25.11.2011 16:29

Ответ: Вопросы от новичка
 
Ну если лочить курсор, то получить - двигалась ли мышка можно только через оси.

RegIon 28.11.2011 10:22

Ответ: Вопросы от новичка
 
Рейкаст матерится на объект,вернее что его нет,код такой
Код:

RaycastHit hit;
        Vector3 fwd = Camera.main.transform.TransformDirection(Vector3.forward);
          if (Physics.Raycast(Camera.main.transform.position, fwd,1))
            Debug.Log(hit.collider.tag.ToString());

Цитата:

NullReferenceException: Object reference not set to an instance of an object
Button1.Update () (at Assets/Scripts/Button1.cs:16)
последняя строка данного кода

pax 28.11.2011 10:46

Ответ: Вопросы от новичка
 
Проверь имеет ли камера в сцене тег "MainCamera". иначе свойство Camera.main не найдет нужную камеру.

RegIon 28.11.2011 19:29

Ответ: Вопросы от новичка
 
Вложений: 1
Вот что я смутил(не без помощи)Вложение 15605

Aikon 05.12.2011 13:33

Ответ: Вопросы от новичка
 
Еще вопрос:
Нужно событие OnMouseDown, т.е. определять, что мышкой кликнули, а не просто держат. Событие надо отлавливать вне зависимости от того, где находится курсор.

Судя по справке OnMouseDown посылается для GUIElement или Collider.
Добавляю GUITexture, который наследник GUIElement, покрывающее весь экран, и вешаю на него скрипт.
Код:

using UnityEngine;
using System.Collections;
public class GameGUI : MonoBehaviour {
        void OnMouseDown()
        {
                Debug.Log("!");
        }
}

Однако фиг - OnMouseDown не приходит. Наверно можно через Box Collider сделать, повесив его перед камерой. Но может быть есть способ проще и лучше?

Nuprahtor 05.12.2011 13:44

Ответ: Вопросы от новичка
 
Event
Вот так можно отлавливать любые нажатия клавиши/мыши и т.п.


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

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