Как мне сделать камеру, которая указывает на то, куда движется игрок, и назад, и вверх, и вниз? - PullRequest
0 голосов
/ 04 мая 2020

это шарик, который на самом деле катится, поэтому я не могу просто поставить детскую камеру со смещением и назвать его днем, поэтому вместо этого я создал этот скрипт:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class camera : MonoBehaviour
{
    public GameObject Player;
    public Vector3 lastpos;
    public Vector3 cameraxyz;
    public Vector3 camerarotationxyz;
    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        Vector3 currentDirection = Player.transform.position - lastpos;
        transform.rotation = Quaternion.LookRotation(currentDirection-camerarotationxyz);
        transform.position = currentDirection + cameraxyz;
        Vector3 lastPos = Player.transform.position;
    }
}

и прикрепил его к пустой игровой объект сделал игровой объект дочерним по отношению к мячу, а затем сделал камеру дочерним по отношению к пустому игровому объекту

, половина которого работает: пустой игровой объект всегда будет вращаться, чтобы его ось z была выровнена с началом координат это означает, что смещение камеры неправильное, и оно не будет смотреть на то, куда движется мяч, но будет смотреть на шар

, вот как я устанавливаю иерархию (я ставлю сценарий на пустой игровой объект ) https://i.stack.imgur.com/sbiMt.png

1 Ответ

0 голосов
/ 04 мая 2020
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class camera : MonoBehaviour
{
    public GameObject Player;
    public Vector3 lastPos;
    public Vector3 cameraxyz;
    public Vector3 camerarotationxyz;
    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        Vector3 currentDirection = Player.transform.position - lastPos;
        transform.rotation = Quaternion.LookRotation(currentDirection - new Vector3(0,currentDirection.y,0));
        Vector3 newPosition = currentDirection + cameraxyz;
        transform.position = newPosition;
        lastPos = Player.transform.position;
        transform.position = Player.transform.position;
    }
}

снятие Vector3 с lastPos и ​​использование заглавных букв приводит к тому, что игровой объект с неправильным смещением и вращением останавливает его движение по оси y (так как я могу изменить направление вверх и изменить y так, чтобы он был параллелен гравитации с помощью внешнего скрипта) я сделал (currentDirection - new Vector3(0,currentDirection.y,0), необходим новый Vector3, и поэтому нули как float или int нельзя использовать для вычитания из Vector3, тогда я сделал transform.position = Player.transform.position;, чтобы пустой игровой объект был правильно надет на затем, чтобы заставить камеру двигаться с правильным смещением, я сделал камеру дочерним объектом пустого игрового объекта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...