【发布时间】:2014-05-31 03:38:20
【问题描述】:
几个小时前我发布了这个相同的脚本,它用于 2D 平台游戏中的视差。我相当有信心我了解其中的大部分内容。唯一真正困扰我的是乘法和加法运算符。现在我知道运算符本身很容易理解,但它们的使用方式有时会让我感到困惑。所以这个脚本实际上并不是我第一次遇到这些运算符的问题。
float parallax = (previousCamPos.x - cam.position.x) * parallaxScales[i];
float backgroundTargetPosX = backgrounds[i].position.x + parallax;
这两行代码就是我在这种情况下所说的。最多,我真正能做的就是制作关于它们如何工作的受过教育的案例。在第二行中,这两个值似乎只是相互配对并存储在一个变量中,因此当相机移动时,背景也会随之移动。第一行似乎有点难以解释,我无法真正理解或真正描述这些值如何相互作用。有人可以帮助阐明为什么使用每个运算符以及何时使用一个运算符而不是另一个运算符?
using UnityEngine;
using System.Collections;
public class Parallaxing : MonoBehaviour {
public Transform [] backgrounds;
private float [] parallaxScales;
public float smoothing = 1f;
private Transform cam;
private Vector3 previousCamPos;
void Awake ()
{
cam = Camera.main.transform;
}
void Start ()
{
previousCamPos = cam.position;
parallaxScales = new float[backgrounds.Length];
for (int i = 0; i < backgrounds.Length; i++)
{
parallaxScales[i] = backgrounds[i].position.z * -1;
}
}
void Update ()
{
for (int i = 0; i < backgrounds.Length; i++)
{
float parallax = (previousCamPos.x - cam.position.x) * parallaxScales[i];
float backgroundTargetPosX = backgrounds[i].position.x + parallax;
Vector3 backgroundTargetPos = new Vector3 (backgroundTargetPosX, backgrounds[i].position.y, backgrounds[i].position.z);
backgrounds[i].position = Vector3.Lerp (backgrounds[i].position, backgroundTargetPos, smoothing * Time.deltaTime);
}
previousCamPos = cam.position;
}
}
【问题讨论】:
-
顺便说一下,Unity 脚本是 Unity 的 Javascript 版本。您正在使用 C#。