Unity 2D Camera Увеличивает когда персонаж перемещается, но свойства камеры не меняются - PullRequest
0 голосов
/ 21 января 2019

После нажатия кнопки воспроизведения камера остается в порядке, но когда я перемещаю своего персонажа, камера увеличивается безо всяких причин

Свойства камеры вообще не меняются, масштабирование и все остается прежним. Попытка перехода от орфографической к перспективе без изменений, перемещение оси Z без изменений, изменение масштаба без изменений, изменение разрешения и без изменений, что делает камеру не родительской, и без изменений она ведет себя так же, как родительская и дочерняя. до прогулки персонажа

после прогулки персонажа

Я не думаю, что с кодом что-то связано, но вот код, прикрепленный к моему персонажу, камера ведет себя так же, как и ребенок, и как родитель

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

public class movement : MonoBehaviour
{
    public float speed = 5f;
    public float jumpSpeed = 8f;
    private float movementX = 0f;
    private Rigidbody2D rigidBody;
    public Transform groundCheckPoint;
    public float groundCheckRadius;
    public LayerMask groundLayer;
    public bool isTouchingGround;
    public SpriteRenderer box;

    private bool canSpawn = true;
    private bool canAnimateWalk = true;
    private bool canAnimateIdle = true;
    private bool canAnimateJump = true;
    private bool stopJump = true;
    private int spawningSpeed = 1000;
    // Use this for initialization
    void Start()
    {
        rigidBody = GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame
    void Update()
    {
        isTouchingGround = Physics2D.OverlapBox(groundCheckPoint.position,new Vector2(0.9f,0.1f),0f, groundLayer);
        movementX = Input.GetAxis("Horizontal");
        if (movementX > 0f)
        {
            if(canAnimateWalk==true && isTouchingGround)
            {
                canAnimateWalk = false;
                StartCoroutine(AnimateWalk());
            }

            GetComponent<SpriteRenderer>().transform.localScale = new Vector3(2, 2, 1);
            rigidBody.velocity = new Vector2(movementX * speed, rigidBody.velocity.y);
        }
        else if (movementX < 0f)
        {
            if (canAnimateWalk == true && isTouchingGround)
            {
                canAnimateWalk = false;
                StartCoroutine(AnimateWalk());
            }
            GetComponent<SpriteRenderer>().transform.localScale = new Vector3(-2, 2, 1);
            rigidBody.velocity = new Vector2(movementX * speed, rigidBody.velocity.y);
        }
        else
        {
            if(isTouchingGround)
            {
                StopCoroutine(AnimateWalk());

                if(canAnimateIdle==true)
                {
                    canAnimateIdle = false;
                    StartCoroutine(AnimateIdle());
                }

            }
            rigidBody.velocity = new Vector2(0, rigidBody.velocity.y);
        }
        if (Input.GetButtonDown("Jump") && isTouchingGround)
        {
            canAnimateJump = false;
            rigidBody.velocity = new Vector2(rigidBody.velocity.x, jumpSpeed);
            StartCoroutine(AnimateJump());
        }
        else if(!isTouchingGround)
        {
            StopCoroutine(AnimateWalk());
        }
    }

    IEnumerator AnimateJump()
    {
        Debug.Log("Animating Jump");
        int counter = 0;
        while (counter < 10)
        {
            counter++;
            GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>("img/j" + counter);
            yield return new WaitForSeconds(0.1f);
            if(isTouchingGround==true)
            {
                break;
            }
        }
        while(!isTouchingGround)
        {
            GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>("img/j10");
            yield return new WaitForSeconds(0.1f);
        }
        GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>("img/i1");
        canAnimateWalk = true;
        canAnimateJump = true;
    }

    IEnumerator AnimateIdle()
    {
        int counter = 0;
        while(Input.GetAxis("Horizontal")==0 && counter <10 && rigidBody.velocity.y==0)
        {
            counter++;
            GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>("img/i"+counter);
            yield return new WaitForSeconds(0.2f);
        }
        canAnimateIdle = true;
    }
    IEnumerator AnimateWalk()
    {
        int counter = 0;
        while (Input.GetAxis("Horizontal")!=0 && counter < 8 && rigidBody.velocity.y==0)
        {
            counter++;
            GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>("img/g" + counter);
            yield return new WaitForSeconds(0.08f);
        }

        canAnimateWalk = true;

    }
}

Что бы это могло быть? Я перепробовал все, что думаю

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Я решил свою проблему

Проблема была в масштабировании персонажа. Камера не изменилась, но размер персонажа заставил меня поверить, что увеличение было.

Мой персонаж по шкале x и y равен 1 и 1, но я использовал шкалу 2 и 2 на ходу

Шкала использовалась для поворота моего персонажа, когда он двигается влево и вправо

0 голосов
/ 21 января 2019
GetComponent<SpriteRenderer>().transform.localScale = new Vector3(-2, 2, 1);

Если ваш сценарий движения привязан к вашему игровому объекту «парень», то вы изменяете его (локальный) масштаб.Все дети также будут соответственно масштабироваться.Поскольку ваша камера - ребенок от парня, она будет масштабироваться и давать результат, который вы видите.

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

...