Связь положений XYZ камеры и игрока

196
01 марта 2019, 22:00

Вообще, просто нужно сделать так, что бы камера и тело игрока поворачивались одинаково, ибо без этого нельзя сделать нормальную ходьбу, потому что оси остаются на своем месте, и если в VR повернуться, например на 180 градусов - получается, если нажать "идти вперед" - мы идем назад.

GyroControl.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GyroControl : MonoBehaviour 
{
    private bool gyroEnabled;
    private Gyroscope gyro;
    private GameObject cameraContainer;
    private Quaternion rot;
    public GameObject cam;
    private void Start()
    {
        //cameraContainer = new GameObject ("Camera Container");
        //cameraContainer.transform.position = transform.position;
        //transform.SetParent (cameraContainer.transform);
        gyroEnabled = EnableGyro ();
        //GameObject.Find ("Camera Container").transform.rotation = Quaternion.Euler (0f,90f,0f);
        //transform.SetParent(player.transform);
    }
    private bool EnableGyro()
    {
        if (SystemInfo.supportsGyroscope) 
        {
            gyro = Input.gyro;
            gyro.enabled = true;
            //cameraContainer.transform.rotation = Quaternion.Euler (90f, 90f, 0f);
            rot = new Quaternion (0, 0, 1, 0);
            return true;
        }
        return false;
    }
    private void Update()
    {
        if (gyroEnabled)
        {
            transform.localRotation = gyro.attitude * rot;
            //player.transform.localRotation = transform.localRotation;
        }
    }
}

Movement.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Movement : MonoBehaviour {
    Rigidbody rb;
    public Camera m_camera;
    public float speed = 3f;
    public float jumpHeight = 3f;
    // Use this for initialization
    void Start () {
        rb = GetComponentInChildren <Rigidbody>();
    }
    // Update is called once per frame
    void Update () {
        //transform.localRotation = m_camera.transform.localRotation;
    }
    private void FixedUpdate()
    {
        float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");
        Vector3 tempVect = new Vector3(horizontal, 0, vertical);
        tempVect = tempVect.normalized * speed * Time.deltaTime;
        rb.MovePosition(transform.position + tempVect);

        if (Input.GetKeyDown(KeyCode.Joystick1Button0) || Input.GetKeyDown(KeyCode.Space))
        {
            rb.AddForce(new Vector3(0, jumpHeight, 0), ForceMode.Impulse);
        }
    }
}
Answer 1

Тебе нужно просто поместить обьект игрока внутрь камеры. И расположить его смотрящим вперед относительно камеры.

В таком случае поворот камеры будет осуществлять поворот и обьекта игрока. Так же в таком случае, возможно, нужно будет заблокировать поворот обьекта игрока по ненужным осям. На сколько я помню, это делается в RigitBody. Хотя не уверен, давго с этим игрался.

READ ALSO
Как запустить несколько корутин в Unity

Как запустить несколько корутин в Unity

Всем приветНачал работать с одним проектом

195
Как деэкранировать строку в c#

Как деэкранировать строку в c#

На вход поступает строка вида : "\\t", которая экранируется как "\t"

217
Приведение к интерфейсу

Приведение к интерфейсу

Есть классПредположим, что у него есть определенные свойства, методы, события

191
Как установить службу Windows из кода?

Как установить службу Windows из кода?

Для WPF приложения нужно в фоновом режиме проверять, загружать и устанавливать обновленияРешил прибегнуть к службам, но хочу реализовать...

261