Понедельник, 23 Сентября 2019, 20:56

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Модератор форума: beril  
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Камера
Камера
ArtM@nДата: Воскресенье, 01 Сентября 2019, 14:29 | Сообщение # 1
был не раз
Сейчас нет на сайте
Добрый день!
При запуске уровня камера работает как надо двигается за персонажем но когда происходит рестарт камера перестает работать, как можно устранить эту проблему?
Код

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

[RequireComponent(typeof(Camera))]

public class CameraController : MonoBehaviour
{
    private enum Mode { Player, Cursor };

    [SerializeField] private Mode face; // вектор смещения, относительно "лица" персонажа или положения курсора
    [SerializeField] private float smooth = 2.5f; // сглаживание при следовании за персонажем
    [SerializeField] private float offset; // значение смещения (отключить = 0)
    [SerializeField] private SpriteRenderer boundsMap; // спрайт, в рамках которого будет перемещаться камера
    [SerializeField] private bool useBounds = true; // использовать или нет, границы для камеры

    private Transform player;
    private Vector3 min, max, direction;
   public static CameraController _use;
    public Camera cam;

    public static CameraController use
    {
        get { return _use; }
    }

    void Awake()
    {
        _use = this;
        cam = GetComponent<Camera>();
        cam.orthographic = true;
        FindPlayer();
        CalculateBounds();
    }

    // переключатель, для использования из другого класса
    public void UseCameraBounds(bool value)
    {
        useBounds = value;
    }

    // найти персонажа, если он был уничтожен, а потом возрожден
    // для вызова из другого класса, пишем: Camera2DFollowTDS.use.FindPlayer();
    public void FindPlayer()
    {
        player = GameObject.FindGameObjectWithTag("Player").transform;
        if (player) transform.position = new Vector3(player.position.x, player.position.y, transform.position.z);
    }

    // если в процессе игры, было изменено разрешение экрана
    // или параметр "Orthographic Size", то следует сделать вызов данной функции повторно
    public void CalculateBounds()
    {
        if (boundsMap == null) return;
        Bounds bounds = Camera2DBounds();
        min = bounds.max + boundsMap.bounds.min;
        max = bounds.min + boundsMap.bounds.max;
    }

    Bounds Camera2DBounds()
    {
        float height = cam.orthographicSize * 2;
        return new Bounds(Vector3.zero, new Vector3(height * cam.aspect, height, 0));
    }

    Vector3 MoveInside(Vector3 current, Vector3 pMin, Vector3 pMax)
    {
        if (!useBounds || boundsMap == null) return current;
        current = Vector3.Max(current, pMin);
        current = Vector3.Min(current, pMax);
        return current;
    }

    Vector3 Mouse()
    {
        Vector3 mouse = Input.mousePosition;
        mouse.z = -transform.position.z;
        return cam.ScreenToWorldPoint(mouse);
    }

    void Follow()
    {
        if (face == Mode.Player) direction = player.right; else direction = (Mouse() - player.position).normalized;
        Vector3 position = player.position + direction * offset;
        position.z = transform.position.z;
        position = MoveInside(position, new Vector3(min.x, min.y, position.z), new Vector3(max.x, max.y, position.z));
        transform.position = Vector3.Lerp(transform.position, position, smooth * Time.deltaTime);
    }

    void LateUpdate()
    {
        if (player)
        {
            Follow();
        }
    }
}
seamanДата: Воскресенье, 01 Сентября 2019, 17:22 | Сообщение # 2
старожил
Сейчас нет на сайте
Зависит от того как делаете рестарт. Но как минимум замените Awake на Start
ArtM@nДата: Воскресенье, 01 Сентября 2019, 17:39 | Сообщение # 3
был не раз
Сейчас нет на сайте
Цитата seaman ()
Зависит от того как делаете рестарт. Но как минимум замените Awake на Start

public void ReloadedGame()
Вот:

Код
   
{
       
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
    

    }
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Камера
  • Страница 1 из 1
  • 1
Поиск:

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