在 Cocos2D 中,我使用了很多动作,例如CCMove,CCRotate,CCEaseIn,CCScale等。
您可以观察到所有这些操作都有一个参数,例如指定的时间间隔。例如,如果我使用位于(0,0)的位置(100,100)的CCMoveTo和5秒的时间,那么它将在5秒内移动节点。
假设我将位置更改为(10,10),然后它也会在5秒内移动。我的意思是任务在一定的时间间隔内完成,无论距离移动,旋转量,比例或任何任务是什么。
现在团结一致,我只想为Unity提供所有这些实用工具。我想为所有这些编写实用程序类。在这种情况下,我对使用Time.deltatime感到有点困惑。
请提供您在一定时间间隔内执行任何任务的一般建议。如果您有,请提供任何代码示例。
答案 0 :(得分:0)
据我所知,没有像你想要的任何内置功能。</ p>
我一直在使用我在自己的Unity游戏中创建的一个类,以帮助我将一个值更改为另一个值。我称之为 SmoothStepHelper
,我会在这里发布代码;也许它会帮助你!
class SmoothStepHelper {
var startTime:float;
var endTime:float;
var duration:float;
function GetPercentage () : float {
return (Time.time - startTime) / duration;
}
static function CreateWithDuration (newDuration:float) : SmoothStepHelper {
var helper:SmoothStepHelper = new SmoothStepHelper();
helper.duration = newDuration;
helper.startTime = Time.time;
helper.endTime = helper.startTime + helper.duration;
return helper;
}
function IsDone () : boolean {
return Time.time >= endTime;
}
}
因此,如果您想顺利地将值从A更改为B,请尝试以下操作:
var positionA:Vector3 = Vector3(0,0,0);
var positionB:Vector3 = Vector3(0,0,100);
var duration:float = 5;
var ssh:SmoothStepHelper;
function Start () {
ssh = SmoothStepHelper.CreateWithDuration(duration);
}
function Update () {
var smoothStep:float = Mathf.SmoothStep(0f, 1f, ssh.GetPercentage());
transform.position = Vector3.Lerp(positionA, positionB, smoothStep);
if (ssh.IsDone()) {
// The 5 seconds has completed, do something else here
}
}
我原来的答案,其中我误解了这个问题:
我发现使用Invoke
方法效果很好。
例如,假设您想在对象开始后5秒更改对象的位置:
var foo:float = 10;
function Start () {
Invoke('MoveOver', 5);
}
function MoveOver () {
transform.position.x += foo;
}