Смещение камеры по оси Х

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Смещение камеры по оси Х

Сообщение nurbolg 03 ноя 2019, 19:10

Привет всем! Необходимо помощь, нужно чтобы при нажатии левой или правой кнопки когда персонаж перемещается влево или вправо (а сам персонаж летит вверх по оси Y) , чтобы камера смещалась чуть по оси х влево или вправо смотря какую кнопку нажимать, я пытался написать что-то, но не работает! :(

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraControl : MonoBehaviour {

        public Transform target;
        public float damping = 1.5f;
        public Vector2 offset = new Vector2(2f, 1f);
        public bool faceLeft;
        private int lastX;
        public float smoothSpeed = .3f;

        void Start ()
        {
                offset = new Vector2(Mathf.Abs(offset.x), offset.y);
        }

        public void FindPlayer(bool playerFaceLeft)
        {
                lastX = Mathf.RoundToInt(target.position.y);
                if(playerFaceLeft)
                {
                        target.position = new Vector2(target.position.x - offset.x, transform.position.z);
                }
                else
                {
                        target.position = new Vector2(target.position.x + offset.x, transform.position.z);
                }
        }

        void LateUpdate ()
        {
                if (target.position.y > transform.position.y)
                {
                        Vector3 newPos = new Vector3 (transform.position.x, target.position.y, transform.position.z);
                        transform.position = Vector3.Lerp (transform.position, newPos, smoothSpeed);
                }
        }

}
 
nurbolg
UNIт
 
Сообщения: 67
Зарегистрирован: 26 окт 2019, 12:19

Re: Смещение камеры по оси Х

Сообщение 1max1 03 ноя 2019, 19:22

Код движения персонажа где?
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Смещение камеры по оси Х

Сообщение nurbolg 03 ноя 2019, 20:20

1max1 писал(а):Код движения персонажа где?


Вот код управление персом, этот код написали вы мне в прошлый раз, я добавил туда прыжок и все!
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

class PlayerControl : MonoBehaviour
{
        [SerializeField] float force = 10.0f;
        [SerializeField] float jump = 5.0f;

        Rigidbody2D rb2D;

        void Start()
        {
                rb2D = GetComponent<Rigidbody2D>();
        }

        public void LeftTap()
        {

                rb2D.velocity += (Vector2.up) * jump;
                rb2D.velocity += (Vector2.up + Vector2.left) * force;

        }

        public void RightTap()
        {

                rb2D.velocity += (Vector2.up) * jump;
                rb2D.velocity += (Vector2.up + Vector2.right) * force;

        }

}
nurbolg
UNIт
 
Сообщения: 67
Зарегистрирован: 26 окт 2019, 12:19

Re: Смещение камеры по оси Х

Сообщение 1max1 03 ноя 2019, 20:26

Синтаксис:
Используется csharp
// Update()
var newPos = player.transform.position + Vector3.right * rb2D.velocity.normalized.x * 10.0f;
cam.transform.position = Vector3.Lerp(cam.transform.position, newPos, 5.0f * Time.deltaTime);
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Смещение камеры по оси Х

Сообщение nurbolg 03 ноя 2019, 21:11

1max1 писал(а):
Синтаксис:
Используется csharp
// Update()
var newPos = player.transform.position + Vector3.right * rb2D.velocity.normalized.x * 10.0f;
cam.transform.position = Vector3.Lerp(cam.transform.position, newPos, 5.0f * Time.deltaTime);

Это к коду управления персонажем?!
nurbolg
UNIт
 
Сообщения: 67
Зарегистрирован: 26 окт 2019, 12:19

Re: Смещение камеры по оси Х

Сообщение 1max1 03 ноя 2019, 21:20

Это пример как можно сделать, можно и отдельный скрипт создать.
Да, еще забыл Z координату приравнять, чтобы не ломать глубину камеры:
Синтаксис:
Используется csharp
var newPos = player.transform.position + Vector3.right * rb2D.velocity.normalized.x * 10.0f;
newPos.z = cam.transform.position.z;
cam.transform.position = Vector3.Lerp(cam.transform.position, newPos, 5.0f * Time.deltaTime);
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Смещение камеры по оси Х

Сообщение nurbolg 04 ноя 2019, 10:45

1max1 писал(а):Это пример как можно сделать, можно и отдельный скрипт создать.
Да, еще забыл Z координату приравнять, чтобы не ломать глубину камеры:
Синтаксис:
Используется csharp
var newPos = player.transform.position + Vector3.right * rb2D.velocity.normalized.x * 10.0f;
newPos.z = cam.transform.position.z;
cam.transform.position = Vector3.Lerp(cam.transform.position, newPos, 5.0f * Time.deltaTime);

Можете подробнее показать как это сделать, просто я только учусь!
nurbolg
UNIт
 
Сообщения: 67
Зарегистрирован: 26 окт 2019, 12:19

Re: Смещение камеры по оси Х

Сообщение 1max1 04 ноя 2019, 11:16

Кидай на камеру, заполняй поля:
Синтаксис:
Используется csharp
public class CameraControl : MonoBehaviour
{
    [SerializeField] Transform player;
    [SerializeField] float offsetX = 10.0f;
    [SerializeField] float intens = 5.0f;

   Rigidbody2D rb2D;

    void Start()
    {
        rb2D = player.GetComponent<Rigidbody2D>();
    }

    void Update()
    {
        var newPos = player.transform.position + Vector3.right * rb2D.velocity.normalized.x * offsetX;
        newPos.z = transform.position.z;
        transform.position = Vector3.Lerp(transform.position, newPos, intens * Time.deltaTime);
    }
}
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Смещение камеры по оси Х

Сообщение nurbolg 06 ноя 2019, 17:18

1max1 писал(а):Кидай на камеру, заполняй поля:
Синтаксис:
Используется csharp
public class CameraControl : MonoBehaviour
{
    [SerializeField] Transform player;
    [SerializeField] float offsetX = 10.0f;
    [SerializeField] float intens = 5.0f;

   Rigidbody2D rb2D;

    void Start()
    {
        rb2D = player.GetComponent<Rigidbody2D>();
    }

    void Update()
    {
        var newPos = player.transform.position + Vector3.right * rb2D.velocity.normalized.x * offsetX;
        newPos.z = transform.position.z;
        transform.position = Vector3.Lerp(transform.position, newPos, intens * Time.deltaTime);
    }
}



Спасибо ! А возможно остановить смещение? например когда персонаж летит влево камера чуть смещается влево и останавливается! так же и когда летит правую сторону.
nurbolg
UNIт
 
Сообщения: 67
Зарегистрирован: 26 окт 2019, 12:19

Re: Смещение камеры по оси Х

Сообщение 1max1 06 ноя 2019, 17:34

Она не улетит дальше, чем ей позволяет offsetX.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Смещение камеры по оси Х

Сообщение nurbolg 06 ноя 2019, 18:24

1max1 писал(а):Она не улетит дальше, чем ей позволяет offsetX.

понял, а вообще можно ограничить , чтобы камера чуть сместился и остановил смещение, так же и в другую сторону!?
nurbolg
UNIт
 
Сообщения: 67
Зарегистрирован: 26 окт 2019, 12:19

Re: Смещение камеры по оси Х

Сообщение 1max1 06 ноя 2019, 18:33

Еще раз повторяю, границу остановки контролирует переменная offsetX. Если тебя смущает плавное перемещение камеры, можешь вместо Vector3.Lerp использовать Vector3.MoveTowards. Можно даже еще более фиксированно сделать:
Синтаксис:
Используется csharp
    void Update()
    {
        if (rb2D.velocity.x != 0.0f)
        {
            var sign = Mathf.Sign(rb2D.velocity.x);
            var newPos = player.transform.position + Vector3.right * sign * offsetX;
            newPos.z = transform.position.z;
            transform.position = Vector3.MoveTowards(transform.position, newPos, intens * Time.deltaTime);
        }
    }
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Смещение камеры по оси Х

Сообщение nurbolg 06 ноя 2019, 20:30

1max1 писал(а):Еще раз повторяю, границу остановки контролирует переменная offsetX. Если тебя смущает плавное перемещение камеры, можешь вместо Vector3.Lerp использовать Vector3.MoveTowards. Можно даже еще более фиксированно сделать:
Синтаксис:
Используется csharp
    void Update()
    {
        if (rb2D.velocity.x != 0.0f)
        {
            var sign = Mathf.Sign(rb2D.velocity.x);
            var newPos = player.transform.position + Vector3.right * sign * offsetX;
            newPos.z = transform.position.z;
            transform.position = Vector3.MoveTowards(transform.position, newPos, intens * Time.deltaTime);
        }
    }


Нет не смущает, все отлично! только тут получается смещение камеры работает когда персонаж двигается, а можно сделать так чтобы смещение камеры работало при нажатии кнопок управления влево или вправо, то есть нажимаешь правую кнопку немного сместилась вправо, левую то в левую сторону. без "Player" -а, то есть при смещении камера не следовала за "Player" -ом, а реагировало на нажатие кнопок.
nurbolg
UNIт
 
Сообщения: 67
Зарегистрирован: 26 окт 2019, 12:19

Re: Смещение камеры по оси Х

Сообщение 1max1 06 ноя 2019, 20:48

Ну так смещай ее в коде, где у тебя кнопки нажимаются.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Смещение камеры по оси Х

Сообщение nurbolg 07 ноя 2019, 08:51

1max1 писал(а):Ну так смещай ее в коде, где у тебя кнопки нажимаются.

не получилось реализовать(
nurbolg
UNIт
 
Сообщения: 67
Зарегистрирован: 26 окт 2019, 12:19

След.

Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 24


cron