#unity3d
#unity3d
Вопрос:
Я создаю 2D шутер с пятислойным фоном с автоматической прокруткой, и у меня возникают проблемы с сохранением объекта player на экране и возможностью управлять им одновременно после того, как я нажал «play» в редакторе.
Немного информации впереди, в иерархии, я настроил ее так, чтобы камера отображала фон. Если я отделяю фон от камеры, изображение сцены и игры становится пустым. Если я делаю фон родительским, вид игры становится пустым, поэтому я оставляю родительскую камеру фоновой.
Проблема заключается в том, что объект player нельзя контролировать или видеть в режиме просмотра сцены, если он отображается камерой или фоном, но виден в режиме просмотра игры. Объект игрока исчезает из игрового поля, если он отделен от любого из них, но остается рядом и может управляться в режиме просмотра сцены. Таким образом, я могу либо видеть объект player в режиме просмотра игры, но не управлять им, либо управлять им в режиме просмотра сцены и не видеть его в режиме просмотра игры. (надеюсь, это имеет смысл)
Нажатие «play» во всех сценариях приводит к тому, что весь фон очень быстро перемещается влево при просмотре сцены. Если объект игрока отделен от камеры и фона, он остается в поле зрения сцены. Наличие дочернего объекта игрока в качестве камеры или фона заставляет их выхватывать его из вида сцены. Пока камера задает фон, фон всегда виден и работает / прокручивается правильно в режиме просмотра игры.
Я возился с сортировкой слоев, и это, похоже, не влияет на порядок отображения слоев. Я создал слой сортировки для «фона», «проигрывателя» и «камеры» и установил порядок разными способами, но ничего не происходит. Манипулирование каждым объектом в иерархии — это единственное, что, кажется, имеет какой-то эффект.
using System.Collections;
использование системы.Коллекции.Общий;
использование UnityEngine;
общедоступный класс PlayerController: MonoBehaviour { общедоступная скорость воспроизведения с плавающей запятой;
private Rigidbody2D rb;
private Vector2 leftStickInput;
// Start is called before the first frame update
void Start()
{
rb = GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update()
{
GetPlayerInput();
}
private void GetPlayerInput()
{
leftStickInput = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));
}
private void FixedUpdate()
{
Vector2 curMovement = leftStickInput * playerSpeed * Time.deltaTime;
rb.MovePosition(rb.position curMovement);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AutoScroll : MonoBehaviour
{
public float bGSpeed = -2f;
Vector2 startpos;
void Start()
{
startpos = transform.position;
}
void Update()
{
float newpos = Mathf.Repeat (Time.time * bGSpeed, 5000);
transform.position = startpos Vector2.left * newpos;
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Parallax : MonoBehaviour
{
private float length, startpos;
public GameObject cam;
public float parallaxEffect;
void Start()
{
startpos = transform.position.x;
length = GetComponent<SpriteRenderer>().bounds.size.x;
}
void Update()
{
float temp = (cam.transform.position.x * (1 - parallaxEffect));
float dist = (cam.transform.position.x * parallaxEffect);
transform.position = new Vector3(startpos dist, transform.position.y, transform.position.z);
if (temp > startpos length) startpos = length;
else if (temp < startpos - length) startpos -= length;
}
}
[enter image description here][1]
[1]: https://i.stack.imgur.com/E0LhS.png
Комментарии:
1. Не могли бы вы добавить немного кода к своему вопросу? Также картинка была бы приятной 🙂
2. ГЕСТАС, я только что обновил код и ссылку на изображение. Спасибо за предложение.
3. Я кое-что понял. Я отключил свой код автоматической прокрутки, и проблема решена. Персонаж виден и воспроизводим как на сцене, так и в игре. Единственная проблема в том, что это было бы здорово, если бы все, что я хотел, было статическим фоном. Мне нужен фон для перемещения, так что теперь я должен это выяснить.