我在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) ;
}
}
所以我需要以与电路板偏移速度相同的速度移动立方体。
答案 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.对其进行归一化,然后我们获得了同步的坐标。
如果有人无法使它正常工作,请告诉我。我可以添加更多详细信息。