
unity3d如何实现手指向左滑动倒序播放图片序列,如果手指不动时停在当前的图片上,向右滑正播序列?
1个回答
展开全部
C#写法:
// 定义一个手势的枚举
public enum Dir:int
{
Left = 0,
Stop,
Right
}
// C#脚本名为Test.cs
public class Test: MonoBehaviour {
public GameObject _plane;// 挂一个用来显示图片的plane对象
public float duration = 0.5f; // 每0.5秒换一张图片
public Texture2D[] _texAll; // 挂30张图片
Dir _touchDir; // 当前的手势
float curTime = 0;
int _index = 0;
void Update()
{
// 当运行平台为IOS或Android时
if(Application.platform == RuntimePlatform.IPhonePlayer || Application.platform == RuntimePlatform.Android)
{
// 当输入的触点数量大于0,且手指移动时
if(Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved)
{
if(Input.GetTouch(0).deltaPosition.x < 0 - Mathf.Epsilon)
_touchDir = Dir.Left;
else
_touchDir = Dir.Right;
}
// 当输入的触点数量大于0,且手指不动时
if(Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Stationary)
{
_touchDir = Dir.Stop;
}
}
// 根据手势顺序或逆序换图
if(_touchDir != Dir.Stop)
{
if(_touchDir == Dir.Left)
{
curTime += Time.deltaTime;
if(curTime > duration)
{
curTime = 0;
_index = _index == 0 ? _texAll.Length - 1 : _index ;
_plane.renderer.material.mainTexture = _texAll[_index--];
}
}
else
{
curTime += Time.deltaTime;
if(curTime > duration)
{
curTime = 0;
_index = _index == _texAll.Length - 1 ? 0 : _index ;
_plane.renderer.material.mainTexture = _texAll[_index++];
}
}
}
}
}
// 定义一个手势的枚举
public enum Dir:int
{
Left = 0,
Stop,
Right
}
// C#脚本名为Test.cs
public class Test: MonoBehaviour {
public GameObject _plane;// 挂一个用来显示图片的plane对象
public float duration = 0.5f; // 每0.5秒换一张图片
public Texture2D[] _texAll; // 挂30张图片
Dir _touchDir; // 当前的手势
float curTime = 0;
int _index = 0;
void Update()
{
// 当运行平台为IOS或Android时
if(Application.platform == RuntimePlatform.IPhonePlayer || Application.platform == RuntimePlatform.Android)
{
// 当输入的触点数量大于0,且手指移动时
if(Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved)
{
if(Input.GetTouch(0).deltaPosition.x < 0 - Mathf.Epsilon)
_touchDir = Dir.Left;
else
_touchDir = Dir.Right;
}
// 当输入的触点数量大于0,且手指不动时
if(Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Stationary)
{
_touchDir = Dir.Stop;
}
}
// 根据手势顺序或逆序换图
if(_touchDir != Dir.Stop)
{
if(_touchDir == Dir.Left)
{
curTime += Time.deltaTime;
if(curTime > duration)
{
curTime = 0;
_index = _index == 0 ? _texAll.Length - 1 : _index ;
_plane.renderer.material.mainTexture = _texAll[_index--];
}
}
else
{
curTime += Time.deltaTime;
if(curTime > duration)
{
curTime = 0;
_index = _index == _texAll.Length - 1 ? 0 : _index ;
_plane.renderer.material.mainTexture = _texAll[_index++];
}
}
}
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |