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)

Lestar 14.04.2012 19:17

Ответ: Вопросы от новичка
 
Это не прицел, это визуальное представление направления выстрела. Привязан к mousePosition.
http://clip2net.com/s/1OdGX

pie 15.04.2012 19:11

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

Lestar 15.04.2012 19:41

Ответ: Вопросы от новичка
 
На курсор повесить пустой GameObject. Сделать target rotation на него.

pie 16.04.2012 08:19

Ответ: Вопросы от новичка
 
Не совсем понял. А можно кусочком кода?

Онлайн смотреть

Lestar 16.04.2012 11:50

Ответ: Вопросы от новичка
 
В общих чертах. Повесить на обьект, который должен следить за курсором.

PHP код:

Transform target;
RaycastHit hit;

void Update()
{
  
Ray ray Camera.main.ScreenPointToRay(Input.mousePosition);

  if (
Physics.Raycast(ray out hit))
  {
   
target.positoin=hit.point;
  }

  
Quaternion targetRotation=Quaternion.LookRotation(target.position-transform.position);
  
transform.rotation=targetRotation;



pie 16.04.2012 15:14

Ответ: Вопросы от новичка
 
Все равно до меня не дошло.

Lestar 16.04.2012 15:50

Ответ: Вопросы от новичка
 
До меня много чего не доходит, но я как минимум корректно составляю вопросы, что именно не понятно.
Для того чтобы поворачивать обект в каком то направлении, нужно знать это направление. В нашем случае направлением служит курсор.
1.Пускаем луч из камеры в точку, где находится курсор
PHP код:

Ray ray Camera.main.ScreenPointToRay(Input.mousePosition); 

2.Получаем координаты точки на площадке(в вашем случае), соответствующие позиции курсора, если курсор находится над площадкой(луч пересекает коллайдер)
PHP код:

if (Physics.Raycast(ray out hit))
  {
   
target.positoin=hit.point;
  } 

3.Поворачиваем обьект по направлению к курсору.
PHP код:

Quaternion targetRotation=Quaternion.LookRotation(target.position-transform.position);
  
transform.rotation=targetRotation


pie 16.04.2012 16:10

Ответ: Вопросы от новичка
 
Assets/Scripts/Player/Player.cs(18,29): error CS1525: Unexpected symbol `out'

Lestar 16.04.2012 16:26

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

if (Physics.Raycast(rayout hit,Mathf.Infinity)) 


pie 16.04.2012 16:54

Ответ: Вопросы от новичка
 
Ну тогда так уж.

Код:

public Camera cam;

void Update () {
               
                Ray ray = cam.ScreenPointToRay (Input.mousePosition);
        RaycastHit hit = new RaycastHit();
        if (Physics.Raycast (ray, out hit))
        {
            Vector3 rot = transform.eulerAngles;
            transform.LookAt(hit.point);
            transform.eulerAngles = new Vector3(rot.x, transform.eulerAngles.y+90, rot.z);
        }
               
        }


pie 16.04.2012 18:52

Ответ: Вопросы от новичка
 
Вот что получилось. Смотреть Только мне не нравится резкие движения игрока когда мышка прямо на нем. Попробовал сделать через проверку на расстояние (то есть не поворачивает если дистанция < 1), но тогда получается другой баг - если провести мышью через игрока и вывести его с другой стороны то он резко повернется назад. Как Вы посоветуете сделать?

Lestar 16.04.2012 22:08

Ответ: Вопросы от новичка
 
Здесь ты в каждом фрейме ориентируешь обьект на таргет точку.
PHP код:

transform.LookAt(hit.point); 

А ты в Update() просто поворачивай обьект на таргет точку с определенной скоростью.

pie 17.04.2012 16:15

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

PHP код:

transform.rotation Quaternion.Slerp(transform.rotationпозиция мышискорость поворота); 

Как определить позицию мыши в пространстве?

PHP код:

Ray ray cam.ScreenPointToRay (Input.mousePosition); 

Не катит, т.к. нужен трансформ или Vector3.

pax 17.04.2012 16:21

Ответ: Вопросы от новичка
 
Очевидно же: Physics.Raycast

pie 17.04.2012 17:27

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

Ray ray cam.ScreenPointToRay(Input.mousePosition); //
        
RaycastHit hit;
        
        if (
Physics.Raycast(rayout hit)) {
            
float rot hit.point;
            
transform.rotation Quaternion.Slerp(transform.rotationrotturnSpeed Time.deltaTime);
        } 

В функцию на место rot нужна переменная float, а hit.point - Vector3 и не может быть float. (((


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

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