首先,给出圣典的解释:
Material.mainTextureOffset 主纹理偏移量
var mainTextureOffset : Vector2
Description描述
The texture offset of the main texture.
主纹理中的纹理偏移量
The same as using GetTextureOffset or SetTextureOffset with "_MainTex" name.
这个与带有"_MainTex"名称的 GetTextureOffset 和 SetTextureOffset 相同
参考:SetTextureOffset, GetTextureOffset.
1 using UnityEngine; 2 using System.Collections; 3 4 public class example : MonoBehaviour 5 { 6 public float scrollSpeed = 0.5F; 7 void Update() 8 { 9 float offset = - Time.time * scrollSpeed; //这里的Time.time和我例子中 Time.detalTime不一样 但这句话的意思是一样的 都是不断递减的一个数 10 renderer.material.mainTextureOffset = new Vector2(offset, 0); 11 } 12 }
从上面我们知道,TextureOffset是纹理偏移的意思,通过renderer.material.mainTextureOffset = new Vector2(offset, 0);函数实现Unity中物体材质的偏移,
通过这个函数 可以在游戏中实现背景循环滚动的效果(也可以通过两个相同的背景交替上下实现这个效果,这里不做细讲) 我们知道编程中一个函数体不变的函数,能影响输出结果
的就是函数的参数, 那么这个函数中的参数代表着什么呢?
笔者在Unity中进行试验:
float m_offset; //物体材质的偏移量 float m_speed= 0.1f; //物体材质偏移的速度 void Update () { m_offset =m_offset - m_speed * Time.deltaTime; //这里物体材质的偏移量 就是 每帧的时间乘以自己定义的速度 this.GetComponent<Renderer>().material.mainTextureOffset = new Vector2(0, m_offset); //通过这个函数实现物体材质的偏移和滚动 }
!!!这里注意 材质偏移只有(x,y)两个参数 分别代表材质在横向和纵向的偏移!!!
在上述例子中,
1.我首先把 new Vector2(0, m_offset)中的0改为10000,编译后在Unity中调试 发现物体材质的偏移速度并没有发生改变
2.然后我又把 new Vector2(0, m_offset)中的0和m_offset进行了互换,发现由上下偏移变成了左右偏移,说明常量没有效果 一个每帧都改变的量才能实现函数的偏移
3.我又把 1.步骤中加了一步:把m_offset前面乘以10000,这样就变成了 new Vector2(10000, 10000*m_offset); 然后调试发现 物体材质偏移左右依然岿然不动 然后上下快了好多好多,
这说明函数中的"10000"是有效果的,而且只有在参数是变量的基础上才会发生作用,而且10000变成100000000的话 物体材质偏移的速度会更快
这样,我们对renderer.material.mainTextureOffset = new Vector2(offset, 0);就有一个全面深刻的了解了,以后用到也会更加灵活了.