我目前正在开发一个游戏,我昨天在后台完成了随机玩家(不是玩家角色)移动的代码,只发现了一个问题。该代码使与地板在同一层上的该播放器具有视差效果,并且应该简单地在一系列坐标之间来回移动播放器,并在到达终点时反转播放器的方向。在游戏视图中或什至从场景视图中查看它并且不移动玩家角色时,此随机玩家将按预期执行。
但是,当玩家的角色移动时,会发生一些非常奇怪的事情。现在,此播放器不在其视差图层中,而是放置在其外部以自由移动。它还附有脚本,以允许摄像机跟随播放器。奇怪的是,如果玩家距离玩家足够近并且朝着随机玩家的方向奔跑,并且该随机玩家触碰到了应该使比例尺方向与之相反的坐标。这仅在启用视差和摄像机跟随脚本的情况下发生,禁用摄像机跟随显然会禁用视差,并且随机播放器会按预期工作。
是什么导致随机播放器在视差和摄像机跟随有效时拒绝切换比例方向?注意:我不确定是否需要发布所有三个组件的脚本,所以现在我只发布我的随机玩家移动脚本。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MSWalkLR : MonoBehaviour
{
private bool dirRight = true;
private float speed = 5.0f;
Vector3 localScale;
Animator anim1;
public GameObject MS;
// Start is called before the first frame update
void Start()
{
anim1 = GetComponent<Animator>();
localScale = MS.transform.localScale;
localScale.x *= -1;
MS.transform.localScale = localScale;
anim1.SetBool("isWalking", true);
}
// Update is called once per frame
void Update()
{
if (dirRight)
{
MS.transform.Translate(Vector2.right * speed * Time.deltaTime);
}
else
{
MS.transform.Translate(-Vector2.right * speed * Time.deltaTime);
}
if (MS.transform.position.x <= -26.0f)
{
localScale.x *= -1;
MS.transform.localScale = localScale;
dirRight = true;
anim1.SetBool("isWalking", true);
}
if (transform.position.x >= 21.0f)
{
localScale.x *= -1;
MS.transform.localScale = localScale;
dirRight = false;
anim1.SetBool("isWalking", true);
}
}
}
更新:当我的相机碰到应该停止跟随播放器的标记时,会发生这种情况。从本质上讲,我的摄影机将以22的x值停止跟随玩家,并且如果我继续移动角色而使摄影机停在摄影机视线之外,则会发生比例不反转的问题。