为什么我不能让背景中的山脉以视差方式移动?
Why can't I make the mountains in the background move in a parallax fashion?
所以,我想让背景随着球员特朗普而移动。我该怎么做?
var trump : Rigidbody2D;
var mountain = GetComponent(Rigidbody2D);
function fixedUpdate() {
mountain.position.x = trump.position.x * 2;
mountain.position.y = trump.position.y * 2;
if (mountain.position.y <= 0) {
mountain.velocity.y = 0;
}
}
我认为您的山脉不需要 RigidBody 组件 - 这些组件适用于执行碰撞并与游戏中的物理属性相关的对象。
在场景中移动游戏对象的正常过程是游戏对象的变换组件,它有一个位置 属性 您可以修改。
请原谅 C#。
[SerializeField] private Transform _mountainRoot;
[SerializeField] private Rigidbody2D _trumpBody;
[SerializeField, Range(0f, 1f)] private float _parallaxFactor = 0.75f;
private Vector2 _lastTrumpPos;
private void Update()
{
// get the amount Trump moved since last update
float deltaTrumpPosX = _trumpBody.position.x - _lastTrumpPos.x;
// move the mountains by a factor of this movement
_mountainRoot.transform.Translate(deltaTrumpPosX * _parallaxFactor, 0f, 0f);
// cache position value to use on next update cycle
_lastTrumpPos = _trumpBody.position;
}
在这里,您将山脉的变换作为您想要操纵其位置的对象,并从您的角色中获取 Rigidbody2D。此外,您采用正常值(0 到 1,将其视为 0 到 100 之间的百分比)来缩放视差效果。
在此 Update() 循环中,我们首先找出自上次更新后角色移动了多少。我们将它的当前位置与我们在上次更新期间记录它的位置进行比较,然后减去,留下 difference/delta.
然后我们将这个增量值和我们的比例因子应用到山脉。 Transform.Translate()是一个修改位置的函数,在本例中我们只想修改X/horizontal值。
最后,我们记录角色在世界中的位置 覆盖之前的值 - 所以我们可以用它来计算下一次更新的增量。
所以,我想让背景随着球员特朗普而移动。我该怎么做?
var trump : Rigidbody2D;
var mountain = GetComponent(Rigidbody2D);
function fixedUpdate() {
mountain.position.x = trump.position.x * 2;
mountain.position.y = trump.position.y * 2;
if (mountain.position.y <= 0) {
mountain.velocity.y = 0;
}
}
我认为您的山脉不需要 RigidBody 组件 - 这些组件适用于执行碰撞并与游戏中的物理属性相关的对象。
在场景中移动游戏对象的正常过程是游戏对象的变换组件,它有一个位置 属性 您可以修改。
请原谅 C#。
[SerializeField] private Transform _mountainRoot;
[SerializeField] private Rigidbody2D _trumpBody;
[SerializeField, Range(0f, 1f)] private float _parallaxFactor = 0.75f;
private Vector2 _lastTrumpPos;
private void Update()
{
// get the amount Trump moved since last update
float deltaTrumpPosX = _trumpBody.position.x - _lastTrumpPos.x;
// move the mountains by a factor of this movement
_mountainRoot.transform.Translate(deltaTrumpPosX * _parallaxFactor, 0f, 0f);
// cache position value to use on next update cycle
_lastTrumpPos = _trumpBody.position;
}
在这里,您将山脉的变换作为您想要操纵其位置的对象,并从您的角色中获取 Rigidbody2D。此外,您采用正常值(0 到 1,将其视为 0 到 100 之间的百分比)来缩放视差效果。
在此 Update() 循环中,我们首先找出自上次更新后角色移动了多少。我们将它的当前位置与我们在上次更新期间记录它的位置进行比较,然后减去,留下 difference/delta.
然后我们将这个增量值和我们的比例因子应用到山脉。 Transform.Translate()是一个修改位置的函数,在本例中我们只想修改X/horizontal值。
最后,我们记录角色在世界中的位置 覆盖之前的值 - 所以我们可以用它来计算下一次更新的增量。