Smooth Camera Follow в Unity для 2D-платформера - PullRequest
0 голосов
/ 26 августа 2018

Последние пару часов я рыскал в интернете, пытаясь найти рабочее решение для этого.Я перепробовал все, что мог придумать: разные типы функций, разные типы обновлений, разное время сглаживания.Ниже видео о том, как играет моя игра.Я делаю небольшой платформер только для практики, и я хочу избавиться от этой проблемы с камерой! Нажмите здесь для видео

Вот мой текущий код, но, опять же, я пробовал и множество других комбинаций.Спасибо за помощь.

using UnityEngine;

public class CameraFollow : MonoBehaviour {

public Transform target;
public Vector3 offset;
public float smoothTime = 0.3f;

private Vector3 velocity;

private void LateUpdate()
{
    transform.position = Vector3.SmoothDamp(transform.position, target.position + offset, ref velocity, smoothTime);
}
}

РЕДАКТИРОВАТЬ: Я пробовал кучу других предложений, но ничего не работает.Если это поможет, я использую Unity 2018.2.5f1 Personal 64 bit.Я использую Razer Blade 15 2018.

Ответы [ 3 ]

0 голосов
/ 26 августа 2018

Вы можете попробовать код ниже.Этот фрагмент кода работает для меня в моей 3D-игре.

public float translationFactor = 20;

void LateUpdate(){
  if(transform.position != target.position) {
    transform.position += (target.position - transform.position) / translationFactor;           
  }
}

Это прямая цитата о том, почему вы должны использовать LateUpdate() при работе с камерами, из документации LateUpdate () Unity3D *..

LateUpdate вызывается после вызова всех функций обновления.Это полезно для заказа выполнения скрипта.Например, следующая камера всегда должна быть реализована в LateUpdate, потому что она отслеживает объекты, которые могли перемещаться внутри Обновления.

Также я заметил, что вы используете Vector3 вместо Vector2 в 2D игра.Я не настолько опытен в 2D, как в 3D, поэтому я не знаю, будет ли какая-то разница в замене Vector3 s на Vector2 s.

0 голосов
/ 26 августа 2018

Я думаю, что ваша проблема в сценарии скелета. Ваша камера следует за скелетом, и вы думаете о проблеме на камере Попробуйте переместить скелет с помощью AddForce вместо transform.position Пример

void Update () {
    if (Input.GetMouseButtonDown (0)) {
        GetComponent<AudioSource> ().PlayOneShot (voices[2]);
        birdSpeed.velocity = Vector2.zero;
        birdSpeed.AddForce (new Vector2 (0, birdUp));
    }
public void Buttons(int i){
    if (i == 0) {
        birds = 0.2f;
        GetComponent<Rigidbody2D> ().gravityScale = 4;
        birdUp = 400;
        StartPanel.SetActive (false);
        GamePanel.SetActive (true);
        GameOverPanel.SetActive (false);
    }

В этом коде, когда я нажимаю на кнопку мыши, вы можете адаптировать свой код к этому

0 голосов
/ 26 августа 2018

Я не проверял это, но оно должно работать, если вы просто измените имя функции с LateUpdate на Update, если я правильно понимаю вашу проблему.

...