统一 - 纹理滚动速度与gameobject

时间:2016-06-30 20:14:16

标签: unity3d scroll textures offset

我在unity3D有一块板,我有一个立方体在板上。 Board已经将纹理和纹理偏移量改变为Y坐标,因此它看起来像向后移动。立方体也应该以与板子偏移相同的速度移动,但我无法在它们之间设置相同的速度。

我的电路板滚动码:

public class moveBoard : MonoBehaviour
{

// Use this for initialization
void Start ()
{

}

// Update is called once per frame
void Update ()
{

    this.GetComponent<MeshRenderer>().material.SetTextureOffset("_MainTex", new Vector2(0, -1 * Time.time));
}
}

我的立方体移动代码:

public class moveTus : MonoBehaviour
{
public GameObject board;
float offsetY = 0f;
// Use this for initialization
void Start ()
{

}

// Update is called once per frame
void Update ()
{
    this.transform.Translate(Vector3.back * -10 * Time.deltaTime) ;
}
}

所以我需要以与电路板偏移速度相同的速度移动立方体。

2 个答案:

答案 0 :(得分:1)

在两个脚本中包含公共速度变量。

public class moveBoard : MonoBehaviour { public float speed=1; void Update () { this.GetComponent().material.SetTextureOffset("_MainTex", new Vector2(0, -1 * Time.deltaTime * speed * UserOptions.speed)); } }

public class moveTus : MonoBehaviour { public float speed=1; void Update () { this.transform.Translate(Vector3.back * -10 * Time.deltaTime * speed * UserOptions.speed) ; } }

在运行时尝试通过在Editor Inspector中手动更改任何这些速度变量值来同步。在找到它们之间的微调后,在设计时应用这些值。

答案 1 :(得分:0)

我今天需要相同的功能。这是我的代码

    List<Vector2> uvs = new List<Vector2>();
    groundMesh.GetComponent<MeshFilter>().mesh.GetUVs( 0 , uvs ); // get uv coordinates

    float min = float.MaxValue;
    float max = float.MinValue;

    foreach ( var item in uvs ) // find min and max
    {
        if ( item.x > max )
        {
            max = item.x;
        }

        if ( item.x < min )
        {
            min = item.x;
        }
    }

    groundUV_X = Mathf.Abs( min - max ); // find absolute value

我的固定更新代码:

 var v = groundMaterial.GetTextureOffset( "_MainTex" ); // get current offset
        groundMaterial.SetTextureOffset( "_MainTex" , new Vector2( v.x + ( speed * Time.fixedDeltaTime * groundUV_X) * (1.0f / groundMesh.bounds.size.z) , v.y ) ); 
// multiply speed by groundUV_X which is total distance between x coordinates
// multiply by world size (normalized total distance)

获取最小和最大uv坐标(在我的情况下是x坐标),然后乘以速度。 由于我们需要在woorld坐标中设置纹理大小(在我的情况下为bounds.size.z) 通过1.对其进行归一化,然后我们获得了同步的坐标。

如果有人无法使它正常工作,请告诉我。我可以添加更多详细信息。