首页 > 解决方案 > 变量未在 void Start() 上赋值(菜鸟问题)

问题描述

我有一个代码可以使立方体在其原始放置位置的一定范围内来回移动。

脚本直接在立方体上,它确实移动,但在 0,0,0 坐标附近,而不是它的原始位置。

这是我的代码:

using UnityEngine;

public class ObstacleResonator : MonoBehaviour
{
    public float xspeed = 0f;
    public float yspeed = 0f;
    public float zspeed = 0f;

    public float xrange = 0f;
    public float yrange = 0f;
    public float zrange = 0f;

    float StartX;
    float StartY;
    float StartZ;

    Vector3 desiredPosition;
    void Start()
    {
        // this is what i think is the problem, the variables are not getting assigned
        float StartX = transform.position.x;
        float StartY = transform.position.y;
        float StartZ = transform.position.z;
    }

    // Update is called once per frame
    void Update()
    {
        // the following is to make it reverse once it is out of range in any of the axes
        if (transform.position.x > xrange + StartX)
        {
            xspeed = -xspeed;
        }
        if (transform.position.x < -xrange + StartX)
        {
            xspeed = -xspeed;
        }


        if (transform.position.y > yrange + StartY)
        {
            yspeed = -yspeed;
        }
        if (transform.position.y < -yrange + StartY)
        {
            yspeed = -yspeed;
        }


        if (transform.position.z > zrange + StartZ)
        {
            zspeed = -zspeed;
        }
        if (transform.position.z < -zrange + StartZ)
        {
            zspeed = -zspeed;
        }

        // the following actually moves the cube
        desiredPosition.x = transform.position.x + xspeed * Time.deltaTime;

        desiredPosition.y = transform.position.y + yspeed * Time.deltaTime;

        desiredPosition.z = transform.position.z + zspeed * Time.deltaTime;

        transform.position = desiredPosition;
    }
}

可能有一种更紧凑的方式来编写它。

立方体正在围绕 0,0,0 而不是原来的变换位置移动。我尝试手动分配 StartX、StartY、StartZ 值,并且效果很好,但它们似乎并没有在一开始就被分配。

标签: c#unity3d

解决方案


问题是您在 Start() 函数中声明了 NEW 变量,一旦函数执行,它们就会超出范围。您不更新类变量。

改用这个:

void Start()
{
    StartX = transform.position.x;
    StartY = transform.position.y;
    StartZ = transform.position.z;
}

推荐阅读