c# - 如何以世界单位设置纹理的滚动速度?
问题描述
我正在尝试用来自屏幕一侧的物体制作一个无限跑步者。但是,对象的速度与地板纹理的速度不匹配。
public GameObject floorPrefab;
public GameObject g;
float floorSpeed = 3.0;
void FixedUpdate () {
//Floor
floorSpeed += 0.001f;
floorPrefab.GetComponent<Renderer>().material.mainTextureOffset += new Vector2(floorSpeed * Time.fixedDeltaTime, 0.0f);
//GameObject
g.transform.Translate(-Vector2.right * floorSpeed * Time.fixedDeltaTime);
}
物体和材料应以相同的速度沿该x
方向行进。
我的地板是在一个方向上铺Quad
了MeshRenderer
17 次瓷砖x
。
解决方案
mainTextureOffset
采用 uv 单位并Translate
使用世界空间单位。您需要一种在它们之间进行转换的方法。
首先,你需要知道你的渲染器渲染了多少个 uv 单位。这相当于它一次显示的纹理的多少,或者它在渲染器上重复的次数。
uVcount = 17f; // repeats 17 times in the scrolling direction
然后,您需要知道渲染器在世界单位中(在滚动方向上)有多长。因为您的渲染器是轴对齐的,所以这变得很容易,因为我们可以使用它renderer.bounds.size
来找到网格的体积,然后renderer.bounds.size.x
找到长度。
Renderer rend = floorPrefab.GetComponent<Renderer>();
float rendererLength = rend.bounds.size.x;
所以现在剩下的就是将floorSpeed
世界单位 per转换fixedUpdate
为 UV 单位 per fixedUpdate
,然后将其用作偏移量的变化量:
float floorSpeedUV = floorSpeed * uVcount / rendererLength;
rend.material.mainTextureOffset += new Vector2(floorSpeedUV * Time.fixedDeltaTime, 0.0f);
总而言之,这可能看起来像这样:
public GameObject floorPrefab;
public GameObject g;
public float uVcount = 7f; // repeats 7 times in the scrolling direction
float floorSpeed = 3.0;
private Renderer rend;
private float rendererLength;
void Start () {
rend = floorPrefab.GetComponent<Renderer>();
rendererLength = rend.bounds.size.x;
}
void FixedUpdate () {
//Floor
floorSpeed += 0.001f;
float floorSpeedUV = floorSpeed * uVcount / rendererLength;
rend.material.mainTextureOffset += new Vector2(floorSpeedUV * Time.fixedDeltaTime, 0.0f);
//GameObject
g.transform.Translate(-Vector2.right * floorSpeed * Time.fixedDeltaTime);
}
推荐阅读
- python - 尊重时间的 pandas.groupby 对象的移动平均值
- php - 如何在 worldpay 支付方式中获取安装密钥?
- express - 如何监听 Nginx 上的不同端口并代理请求?
- javascript - 以编程方式从坐标中选择 Fabricjs 画布中的对象
- python - 如何在python中替换NaN值
- android - 在 Android 中改造嵌套的 GET 请求
- angularjs - 在另一个没有数组的对象中读取和推送对象
- ruby-on-rails - 如何过滤 Rails 5.2 中nested_form_fields gem 编辑的记录?
- amazon-web-services - 当图像名称包含重音字符时,Amazon s3 putObject 返回 403
- javascript - 添加 retryWhen() 后未调用 Rxjs 订阅