Unity 据手势滑动速度 控制能量条的增长

 

 

  1. //当进入决斗模式时,判断玩家是否移动摇杆   
  2. if(Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved){  
  3.     Ray ray = Camera.main.ScreenPointToRay (Input.GetTouch(0).position);  
  4.     RaycastHit hit;  
  5.     if(Physics.Raycast (ray, out hit, 1000)){  
  6.         print(hit.transform.name.ToString());  
  7.         if(hit.transform.name=="rockerColorUp"){  
  8.             //获取手势移动的速度   
  9.             Vector2 touchDeltaPosition= Input.GetTouch(0).deltaPosition;  
  10.             float distance=Mathf.Sqrt(Mathf.Pow(touchDeltaPosition.x,2f)+Mathf.Pow(touchDeltaPosition.y,2f));  
  11.             velocity=Mathf.Abs(distance/Time.deltaTime);   
  12.                         velocity=Mathf.Sqrt(velocity)/10000;  
  13.             //根据手势移动速度决定能量条的增长,同时能量条有一个固定的减速  
  14.                     GameSetting.energyBarValue+=(velocity-GameSetting.BarSpeedDown[GameSetting.CompetitorNow.id-1]);  
  15.             GameSetting.energyBarValue=1;  
  16.             energyBar.UpdateBar_MJM(GameSetting.energyBarValue,false)  
  17.             //控制摇杆的移动   
  18.             if(target){  
  19.                     rocker.transform.Rotate(0,0,-500*Time.deltaTime);  
  20.             }  
  21.             else{  
  22.                 rocker.transform.Rotate(0,0,500*Time.deltaTime);  
  23.             }  
  24.             if(rocker.transform.localEulerAngles.z<=340&&rocker.transform.localEulerAngles.z>=20&&target){  
  25.                 target=false;  
  26.                 rocker.transform.localEulerAngles=new Vector3(0,0,340);  
  27.             }  
  28.             if(rocker.transform.localEulerAngles.z>=20&&rocker.transform.localEulerAngles.z<=340&&!target){  
  29.                 target=true;  
  30.                 rocker.transform.localEulerAngles=new Vector3(0,0,20);  
  31.             }  
  32.   
  33.         }  
  34.     }  
  35.   }  
  36.   else{  
  37.     //在能量条值大于0时,且玩家没有手势动作时,能量条有一个固定的减速  
  38.     if(GameSetting.energyBarValue>=0){  
  39.         GameSetting.energyBarValue-=GameSetting.BarSpeedDown[GameSetting.CompetitorNow.id-1];  
  40.         energyBar.UpdateBar_MJM(GameSetting.energyBarValue,false);  
  41.     }  
  42.     rocker.transform.localEulerAngles=new Vector3(0,0,0);  
  43. }  

 

 

 

 |||||||||||||||||||||||||||    获取手指移动的路程     以及     手指移动的速度 Unity |||||||||||||||||||||||||||

 

为了获得精确值,可以在FixedUpdate里面执行,同时也可以减小计算量,更改FixedUpdate的更新速率的位置为Edit->Project Setting->Time。

  1.  float distance;  
  2.  void start(){  
  3.     distence=0;  
  4.  }  
  5. void FixedUpdate{  
  6.     if(Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved){  
  7.         Vector2 touchDeltaPosition= Input.GetTouch(0).deltaPosition;  
  8.         float temp=Mathf.Sqrt(Mathf.Pow(touchDeltaPosition.x,2f)+Mathf.Pow(touchDeltaPosition.y,2f));  
  9.          // 路程   
  10.         distence+=temp;  
  11.         //速度   
  12.         velocity=Mathf.Abs(temp/Time.deltaTime);  
  13.     }  
  14.     else{  
  15.         distence=0;  
  16.     }  
  17. }  

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值