Из кватериона гироскопа поворачивать персонажа и камеру.

Общие вопросы о Unity3D

Из кватериона гироскопа поворачивать персонажа и камеру.

Сообщение TermenatorX 03 янв 2017, 16:14

Задался целью поворачивать камеру от первого лица с помощью гироскопа, нашел код:
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class GyroCamera : MonoBehaviour
{
        private float initialYAngle = 0f;
        private float appliedGyroYAngle = 0f;
        private float calibrationYAngle = 0f;

        void Start()
        {
                Input.gyro.enabled = true;
                initialYAngle = transform.eulerAngles.y;
        }

        void Update()
        {
                ApplyGyroRotation();
                ApplyCalibration();
        }

        void OnGUI()
        {
                if( GUILayout.Button( "Calibrate", GUILayout.Width( 300 ), GUILayout.Height( 100 ) ) )
                {
                        CalibrateYAngle();
                }
        }

        public void CalibrateYAngle()
        {
                calibrationYAngle = appliedGyroYAngle - initialYAngle; // Offsets the y angle in case it wasn't 0 at edit time.
        }

        void ApplyGyroRotation()
        {
                transform.rotation = Input.gyro.attitude;
                transform.Rotate( 0f, 0f, 180f, Space.Self ); // Swap "handedness" of quaternion from gyro.
                transform.Rotate( 90f, 180f, 0f, Space.World ); // Rotate to make sense as a camera pointing out the back of your device.
                appliedGyroYAngle = transform.eulerAngles.y; // Save the angle around y axis for use in calibration.
        }

        void ApplyCalibration()
        {
                transform.Rotate( 0f, -calibrationYAngle, 0f, Space.World ); // Rotates y angle back however much it deviated when calibrationYAngle was saved.
        }
}
 

Камера - дочерний объект на игроке. Тщетно пытался отделить от кватерниона ось поворота Y и поворачивать персонажа. Прошу помощи у более опытных пользователей.
(Весь код рабочий если вы попали сюда и ищите код для поворота камеры гироскопом, то он рабочий)
Аватара пользователя
TermenatorX
UNIт
 
Сообщения: 102
Зарегистрирован: 24 мар 2013, 23:52

Re: Из кватериона гироскопа поворачивать персонажа и камеру.

Сообщение TermenatorX 03 янв 2017, 16:57

Устройство находится в горизонтальном положении.
Аватара пользователя
TermenatorX
UNIт
 
Сообщения: 102
Зарегистрирован: 24 мар 2013, 23:52

Re: Из кватериона гироскопа поворачивать персонажа и камеру.

Сообщение TermenatorX 05 янв 2017, 00:00

Отвечу сам на свой вопрос, после того как повернули камеру я поворачиваю персонажа, а камеру назад.
Вот код:
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class GyroCamera : MonoBehaviour
{
        public Transform pl;
        private float initialYAngle = 0f;

        void Start()
        {
                Input.gyro.enabled = true;
                initialYAngle = transform.eulerAngles.y;
        }

        void Update()
        {
                transform.rotation = Input.gyro.attitude;
                transform.Rotate( 0f, 0f, 180f, Space.Self );
                transform.Rotate( 90f, 180f-initialYAngle, 0f, Space.World );

                Vector3 rot = pl.rotation.eulerAngles;
                rot.y = transform.rotation.eulerAngles.y;
                pl.rotation = Quaternion.Euler (rot);
                rot=transform.localRotation.eulerAngles;
                rot.y = 0f;
                transform.localRotation = Quaternion.Euler (rot);
        }
}
 

pl - из названия игрок, скрипт вешать на камеру. Расчитано на горизонтальное положение устройства.
Аватара пользователя
TermenatorX
UNIт
 
Сообщения: 102
Зарегистрирован: 24 мар 2013, 23:52


Вернуться в Общие вопросы

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12