Advertisement

Unity的虚拟轴Horizontal和TimeScale

阅读量:

作为一名普通的不能再普通的人,在过去几天里回过头来学习并掌握了一些Unity的实用技巧。

首先要说的是虚拟轴Horizontal

playerMoveX被赋值为Input.GetAxis('Horizontal')的结果。这是一个整数类型变量,在游戏开发中被用来获取来自玩家的水平方向输入。它存储了来自Horizontal轴的方向值,并且其取值范围在-1至1之间。明白这一点之后,在某些情况下可能会有所帮助。例如,在二维游戏中实现类似的功能可能需要较多的动画制作工作量。不过现在有了这个机制,则会减少一半的工作量哦!

下来是TimeScale,这是一个可以直接赋值的,那么它是用来干什么的呢?

子弹时间,没错!子弹时间,它可以让整个Scence里的所有东西变慢。

TimeScale的基础是1,正常时间流速

当数字为0.5时,时间流速为正常的二分之一

同理数字为2时,时间流速为正常的二倍

需要注意的是,在使用这种方法时,请确保数值不允许低于零。当数值为零时代表静止状态;如果数值低于零则表示时间倒退。使用这种方法显然是不可能的;这并不是时间回溯魔法而是时间减缓的效果。

来一段用法以示诚意

复制代码
 using System.Collections;

    
 using System.Collections.Generic;
    
 using UnityEngine;
    
  
    
 public class RopeAttraction : MonoBehaviour {
    
  
    
     public float totalTime = 0.25f;//持续时间
    
     public float bulletTimeMeasure = 0.25f;//子弹时间力度,控制时间流速倍数
    
  
    
     bool canLaunch;
    
 	// Use this for initialization
    
 	void Start () {
    
 		
    
 	}
    
 	
    
 	// Update is called once per frame
    
 	void Update () {
    
 		/*if(Input.GetMouseButtonDown(0))
    
     {
    
         /*if (Time.timeScale < 0) Time.timeScale = 0;
    
         else Time.timeScale -= timeScaleDelta;
    
         Time.timeScale -= timeScaleDelta;
    
     }*/
    
     //咋瓦卢多!!
    
     if(Input.GetMouseButton(1))
    
     {
    
         Time.timeScale = bulletTimeMeasure;
    
         StartCoroutine(RestartTime());
    
     }
    
 	}
    
 //恢复正常
    
     IEnumerator RestartTime()
    
     {
    
     yield return new WaitForSeconds(totalTime);
    
     Time.timeScale = 1f;
    
     }
    
 }

其效果如何?单击鼠标右键,请问您是否看到窗口?(如果显示异常)在ToatlTime后恢复正常。

这一点需要特别注意所有的力量与TimeScale结合起来会导致不平滑的现象如何解决这个问题呢?我正致力于寻找解决方案

全部评论 (0)

还没有任何评论哟~