【发布时间】:2021-01-19 17:58:49
【问题描述】:
这是一个疯狂的问题。如果您需要,请与我联系,并要求提供任何其他详细信息!
我尝试了来自this youtube tutorial 的本教程,以创建一个无限视差,它随着相机的移动而移动。首先,摄像机通过作为主摄像机的电影机锁定在玩家身上。
这是我的统一编辑器屏幕:
拆分图层以显示实际图层:
正如您所见,Background Parallax 图层中有这三个图层,这些图层是一个单独的视差场景,其中 sprite 被复制三次并彼此靠近放置。 [第 1、2 和 3 层是场景中复制的相同精灵集合]
层次结构中第 1、2 和 3 层的每个子对象只是一个精灵,例如:一棵树、灌木或下面的地面。
MainCamera 属性:
相机连接到四处移动的玩家身上。
当玩家向前移动时,当图层即将完成时,该图层不会被复制。简单地说,不是翻滚给人无限的感觉。
问题[在玩家向前移动时层没有“到达”在玩家面前]:
此外,我尝试通过进入场景来调试游戏,只是发现当我点击播放按钮时,所有三层都相互重叠,而不是它们的分布方式。他们只是堵塞了相机,如下所示:
我只是希望视差在我继续前进时是无限的,而不是像上面看到的那样看到破碎的场景。
附加到每个层的子(精灵)的视差代码(不包括第 1、2、3 层,因为它们只是用于整理层次结构的空对象):
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Parallax : MonoBehaviour
{
private float spriteLength, startpos;
public GameObject cam;
public float parallaxEffect;
// Start is called before the first frame update
void Start()
{
startpos = transform.position.x;
spriteLength = GetComponent<SpriteRenderer>().bounds.size.x;
}
// Update is called once per frame
void FixedUpdate()
{
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 + spriteLength)
{
startpos += spriteLength;
}
else if (temp < startpos - spriteLength)
{
startpos -= spriteLength;
}
}
}
上面的代码只是在玩家移动时沿 x 方向(左右)移动精灵。 我相信由于相机连接到播放器,层的滚动不会发生。只是一种预感。非常感谢任何帮助!
【问题讨论】:
-
您为每一层的
parallaxEffect变量分配了哪些值? -
它是一个浮点值,例如:编辑器中精灵的SerializedField中的0.4值
标签: unity3d