Пятница, 29 Марта 2024, 07:48

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Нужна помощь с камерой (C#)
Нужна помощь с камерой
dzrone3488Дата: Суббота, 19 Марта 2016, 19:36 | Сообщение # 1
участник
Сейчас нет на сайте
Я не давно спрашивал по поводу Quaternion'а. Я почитал, но это мне не помогло. Надеюсь, то кто-нибудь поможет, укажет куда копать. И так вот код, он поворачивает камеру хаотично поворотам смартфона, используя акселерометр. Но вот проблема, если вы кинете скрипт на камеру до заметите, что камера не поворачивается на лево, или на право. Что делать? Я перепробовал всё, что только можно, но нечего не помогает. Вот также скрин настроек инспектора
Код

using UnityEngine;
using System.Collections;

public class Kript : MonoBehaviour {

    public bool headQuaternionTracking;
    public bool headVectorTracking;
    public bool callibrator;

    public float accelerationX;
    public float accelerationY;
    public float accelerationZ;
    public float quaternionW;

    public float coefficientX;
    public float coefficientY;
    public float coefficientZ;
    
    void Start () {
    

    }
    
    
    void Update () {
        if (callibrator == false)
        {
            if (headQuaternionTracking)
            {
                accelerationX = Input.acceleration.x - coefficientX;
                accelerationY = -Input.acceleration.y - coefficientY;
                accelerationZ = Input.acceleration.z - coefficientZ;

                transform.rotation = new Quaternion(transform.rotation.x + accelerationX, transform.rotation.y + accelerationY, transform.rotation.z + accelerationZ, 0.0f);
            }
            else { }

            if (headVectorTracking)
            {

                transform.position = new Vector3(Input.acceleration.x, transform.position.y, transform.position.z);
            }
            else { }
        }
        else
        {
            transform.position = new Vector3(-Input.acceleration.x, transform.position.y, transform.position.z);
        }
    }
}





Я делаю игры, а вы в них играете! :)
Моя группа по созданию игр - www.vk.com/dzrone

LertmindДата: Суббота, 19 Марта 2016, 20:46 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
Если поставить false для headQuaternionTracking, то работает нормально?
На счёт этой строчки transform.rotation = new Quaternion(..., ты точно знаешь как работают кватернионы? Потому что это не тоже самое, что углы Эйлера, которые в инспекторе.

Добавлено (19 марта 2016, 20:42)
---------------------------------------------
Попробуй вместо transform.rotation = new Quaternion(...);, написать transform.Rotate(accelerationX, accelerationY, accelerationZ); либо transform.Rotate(accelerationX, accelerationY, accelerationZ, Space.World); для поворота относительно мира, хотя учитывая что ты хочешь хаотичного движения, то наверно всё равно.

Добавлено (19 марта 2016, 20:46)
---------------------------------------------
Ещё по-хорошему надо все acceleration умножить на Time.deltaTime: accelerationX *= Time.deltaTime;

Сообщение отредактировал Lertmind - Суббота, 19 Марта 2016, 20:15
dzrone3488Дата: Воскресенье, 20 Марта 2016, 00:31 | Сообщение # 3
участник
Сейчас нет на сайте
Цитата Lertmind ()
Если поставить false для headQuaternionTracking, то работает нормально?
На счёт этой строчки transform.rotation = new Quaternion(..., ты точно знаешь как работают кватернионы? Потому что это не тоже самое, что углы Эйлера, которые в инспекторе.
Добавлено (19 марта 2016, 20:42)
---------------------------------------------
Попробуй вместо transform.rotation = new Quaternion(...);, написать transform.Rotate(accelerationX, accelerationY, accelerationZ); либо transform.Rotate(accelerationX, accelerationY, accelerationZ, Space.World); для поворота относительно мира, хотя учитывая что ты хочешь хаотичного движения, то наверно всё равно.

Добавлено (19 марта 2016, 20:46)
---------------------------------------------
Ещё по-хорошему надо все acceleration умножить на Time.deltaTime: accelerationX *= Time.deltaTime;


Огромное спасибо, про Rotate вылетело из головы, скоро попробую!


Я делаю игры, а вы в них играете! :)
Моя группа по созданию игр - www.vk.com/dzrone

Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Нужна помощь с камерой (C#)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг