当前位置:首页 » 编程软件 » 脚本制作时钟

脚本制作时钟

发布时间: 2023-06-06 02:54:37

‘壹’ Unity C#入门教程——动画时钟实现

显示当前时间的时钟

为游戏对象创建层级关系

编写脚本并与对象关联

使用命名空间

使用方法更新游戏物体

按时间进行旋转

在此教程中我们编写一个简单的C#脚本来制作时钟指针动画。

要求大家已经对Unity的编辑器有了基本的了解,其实,只需用过Unity几分钟就可以开始该案例了。

很快我们就能完成以下成果。

制作时钟

不用任何Unity资源包,我们从0开始创建Unity工程。缺省的场景中有一个位于 (0, 1, -10), 朝着z轴的负方向的摄像机,为了使摄像机中显示的透视图与场景一致,选择摄像机,并在菜单中选择执行 GameObject /* Align View*将摄像机与当前场景对齐。

啥是 游戏物体

子物体又是哈东东?

我们就简单用立方体来制作时钟的指针,为每个指针使用 GameObject/ Create Other / Cube 创建立方体。对于时针,设置其位置为 (0, 1, 0) ,三个轴上的缩放分别为 (0.5, 2, 0.5) .,对分针位置为 (0, 1.5, 0) ,缩放 (0.25, 3, 0.25) ,秒针的则分别是: (0, 2, 0)
**(0.1,4, 0.1)。
**

创建的时钟,以及其中游戏物体间的层级关系。

制作时钟指针动画

要让时钟动起来,就得写点脚本了。在工程视图中右键,选择 Create/ C# Script 新建一个C#脚本,将其命名为 ClockAnimator。 双击打开之,将其中内容清空,从空文件开始。

首先,我们要引用Unity的命名空间,接着就是定义 ClockAnimator 类。将其定义为一个公开的类,继承自[MonoBehaviour]

using UnityEngine;

public class ClockAnimator : [MonoBehaviour]

}

神马是命名空间?

类又是啥?

关于****[MonoBehaviour]****类?

这样我们就创建了一个可以作为组件的最小的类。保存之,接着从 Project 窗口中把它直接拖放到 Hierarchy (层级)视图的 Clock 游戏物体上,建立其与该游戏对象的关联。当然,也可以使用 Clock 游戏物体的 Add Component 按钮。

将ClockAnimator与Clock关联

要让指针动起来,我们得使用指针组件的 Transform 对象。首先,在刚才的脚本中为每个指针添加一个 Transform 变量,并保存它。这样,这些公开变量就成为可在编辑器中被赋值的组件属性,编辑器会获得这些游戏物体的 Transform 组件,并将它们赋予这些变量,选择 Clock ,将指针对应的游戏物体赋给这些属性。

变量是什么?

using UnityEngine;

public class ClockAnimator : [MonoBehaviour]{

}

为空的ClockAnimator属性和填写属性后的ClockAnimator

下面在脚本中添加一个update方法。这是一个特殊的方法,它会在每一帧播放时调用,我们在这个方法中实现时钟指针的旋转。

using UnityEngine;

public class ClockAnimator : [MonoBehaviour]{

}

}

方法是啥?

[ Update ] 方法是否应当公开?

保存脚本,编辑器会提示组件中已经有了update方法,并在脚本组件的左侧出现一个复选框,这样我们就能禁用该脚本组件了,当然此时,还是要保持它处于可用状态。

ClockAnimator更新的显示了复选框

每个小时,时针要转动360/12度;分钟指针则是每分钟转动360/60度;而秒针是每秒旋转360/60度。为了程序中使用方便,我们把这些值定义为私有的浮点常量。

using UnityEngine;

public class ClockAnimator : [MonoBehaviour] {

}

常量有什么特殊性?

为了让时钟转动起来,每次update时,我们先得到当前系统的时间。System命名空间中的[DateTime] 结构体 可以用来存储时间,而该结构体中的静态属性Now可以返回当前时间,这样,每次update时,我们就先得到该值并将其存储到一个临时变量中。

using UnityEngine;

using System;

public class ClockAnimator : [MonoBehaviour]{

}

什么是结构体?

属性又是什么?

要让指针转动,就需要更新指针的旋转,而这可以通过设置指针的localRotation实现。使用四元数:[Quaternion]可以定义任意角度的旋转。

因为摄像机朝向是z轴,Unity使用的是左手坐标系统,因此指针应该是绕着Z轴负方向进行旋转。

using UnityEngine;

using System;

public class ClockAnimator : [MonoBehaviour] {

}

时间显示为12:44

四元数quaternion是什么?

旋转又是啥?

改进时钟的实现

很好!在游戏的运行模式中,时钟已经可以显示当前的时间了,但是使用离散的时间值让它看起来更像是一个电子钟。下面增加一个选项,实现模拟时间显示。在脚本中添加一个公开的布尔变量 analog ,用它来决定update方法中的显示方式,这样我们就能在编辑器中直接控制时钟的显示方式了,即使是在游戏运行时。

using UnityEngine;

using System;

public class ClockAnimator : [MonoBehaviour] {

}

添加了analog模式的ClockAnimator

对于模拟现实显示的选项,我们使用和之前稍稍不同的方式。这次不用[DateTime].Now,我们用[DateTime].Now.TimeOfDay,这是一个时间段[TimeSpan]。返回的是自每天午夜开始到现在已经经过的小时,分钟和秒数。由于这个值是双精度数,使用时我们需要将它们转换为float类型。

类型转换的意思是

using UnityEngine;

using System;

public class ClockAnimator : [MonoBehaviour] {

}

按照模拟方式显示的时钟
现在时钟也可以按模拟方式显示了。
unitypackage PDF
**
****原文链接:
** http://catlikecoding.com/unity/tutorials/clock/

‘贰’ 怎样用FLASH做一个会动的时钟

具体步骤
1、 运行Flash MX 2004,新建影片剪辑,命名为“表盘”。进入编辑区绘制一条直线,单击【窗口】|【设计面板】|【变形】命令,打开变形面板,添入旋转角度为30度,拷贝并应用变形。按照同样方法,绘制出其他分钟的刻度。
2、 在背景层中我们添加三个动态文本框,变量名称为:“weeks”,“days”和“timebox”。
3、 分别新建三个影片剪辑,命名为“时针”,“分针”,“秒针”。绘制三个指针的形状。注意指针的中心点的位置。
4、 导入一段指针移动的模拟音乐。在声音文件的连接属性中选择“为动作脚本导出”,命名为“sound”。
5、 新建一个影片剪辑,命名为“音乐”。在第1帧添加as:stop(); 第2帧插入空白关键帧,添加as:
ss = new Sound();
ss.attachSound("sound");
ss.start();
ss.onSoundComplete = function() {
ss.start();
}; //调用库中的声音文件sound
6、返回到场景1,把“表盘”影片剪辑拖放到舞台中,利用对齐面板使之处与舞台中央位置。
7、新建一个图层,绘制一个中心点。同样利用对齐面板使之处与中央位置。
8、新建三个图层,分别放置“时针”,“分针”,“秒针”影片剪辑。注意,影片剪辑的中心点要与步骤6绘制的中心点重合。

1、 新建一个音乐层,把“音乐”影片剪辑放置在场景的任何位置。在下面的属性面板中,命名为“777”。

2、 分别选择“时针”,“分针”,“秒针”三个影片剪辑,在下面的属性面板中分别命名为“hourpoints”,“minutepoints”和“secondpoints”。

3、 好了,准备工作已经完成了。下面我们添加AS。

4、 选中“表盘”影片剪辑,添加as语句:

onClipEvent (load) {
weekArray = new Array(’星期日’, ’星期一’, ’星期二’, ’星期三’, ’星期四’, ’星期五’, ’星期六’);//建立一个数组,共七个元素
timedate = new Date();//建立一个新的时间对象
}
onClipEvent (enterFrame) {
week = timedate.getDay();//返加0~6,0时取“星期日”;1时取“星期一”…….
weekday = weekArray[week];//从数组中读取中文显示,参看上一句的解释
day = timedate.getDate();//当前的日期,返回值为1~31
hour = timedate.getHours();//当前的时,返回0~23
minute = timedate.getMinutes();当前的分,返回0~59
second = timedate.getSeconds();当前的秒,返回0~59
if (hour<10) {
hour = "0" + hour;//如果时小于10,前面显示加“0”
}
if (minute<10) {
minute = "0" + minute;//同上
}
if (second<10) {
second = "0" + second;//同上
}
timebox = hour+" : "+minute+" : "+second;//显示在动态文本框中
weeks = weekday;//同上一句
days = day;//同上一句
delete timedate;//删除时间对象,目的是实时显示时间
timedate = new Date();//新建时间对象
}

5、 选择“时针”影片剪辑,添加as语句:

onClipEvent (enterFrame) {
hourangle = _root.clock.hour*30+_root.clock.minute/2;
//把钟表符号中的时针对应的角度值赋值给变量“hourangle”
setProperty ("_root.hourpoints", _rotation, hourangle);
}//设置分针的旋转角度

6、 选择“分针”影片剪辑,添加as语句:

onClipEvent (enterFrame) {
minuteangle = _root.clock.minute*6;
//把钟表符号中的分针对应的角度值赋值给变量“minuteangle”
setProperty ("_root.minutepoints", _rotation, minuteangle);
}//设置分针的旋转角度

7、 选择“秒针”影片剪辑,添加as语句:

onClipEvent (enterFrame) {
secondsangle = _root.clock.second*6;
//把钟表符号中的秒针对应的角度值赋值给变量“secondsangle”
setProperty ("_root.secondpoints", _rotation, secondsangle);
}//设置秒针的旋转角度

16、测试,保存。请参看源文件“时钟”。

特别说明
要实现指针式双历钟表,要掌握的知识包括:FLASH的日期型函数和变量的使用,文本框的设置,时间显示的调整,数组的简单应用,以及如何实时的、动态的显示时间;最主要的是利用指针的角度与当前时间的函数关系,才能使时钟准确的指示时间。从中可以看出,如果推理不出这个函数关系,就做不成。所以我们应该多学习一下,多练练自己的逻辑思维能力

‘叁’ 如何用易语言制作脚本

第一个问题:易语言的脚本,如果你说的指让文件执行任务的代码,你你双击那个就可以了
第二个问题:建立一个时钟,设置周期(1秒=1000毫秒,)然后双击时钟,输入代码:
模拟按键 (#回车键, , )
第三个问题:如果你是要按键后台的对某个窗口起作用的,就取它的窗口句柄

‘肆’ ppt脚本怎么画

1、首先用flash做一个时钟
新建一个flash文件,把第一个层命名为时钟层,在第一帧添加一个静态文本00:00:00。选中静态文本,在属性框中把静态文本改为动态文本,并在变量框中填写TimeText。新建一个层,命名为脚本层,在第一个帧中添加脚本如下:
newDate = new Date();
Cur_Hour = newDate.getHours();
if(length(Cur_Hour)<2) Cur_Hour="0"+Cur_Hour;
Cur_Minute=newDate.getMinutes();
if(length(Cur_Minute)<2) Cur_Minute="0"+Cur_Minute;
Cur_Second=newDate.getSeconds();
if(length(Cur_Second)<2) Cur_Second="0"+Cur_Second;
TimeText=Cur_Hour+":"+Cur_Minute+":"+Cur_Second;
在脚本层中新建空白关键帧,在新建帧中添加脚本:gotoAndPlay(1);
点击Ctrl+Enter看看效果,导出swf文件。

2、把flash时钟插入ppt中
把clock.swf文件放在ppt文件所在的目录,打开ppt文件,点开视图-母版-幻灯片母版,点视图-工具栏-控件工具箱-其他控件-Shockwave flash object,选择一个位置插入flash对象。点flash对象-属性-自定义-影片url,写上clock.swf,点确定。 地球你也可以用fish做

‘伍’ 做的FLASH钟,加载了脚本,但分,秒,时针不动,哪位高手可以帮忙改下

针不动可以由很多原因造成,可能是new Date();没有刷新,造成Date里数字不变,针的角度也不改变,还可能是其他动作没有写正确。具体得根据源程序来分析。
下面写一个简单的指针钟表程序仅供参考:
首先先把原件准备好,在舞台上画三个指针分别命名为"shi" "fen" "miao",(注意调整旋转点)放到舞台后,在主时间轴内写以下代码:
_root.onEnterFrame=settime;//每帧执行函数
function settime(){
var myDate=new Date();//重新清空Date函数(这里不重新初始会造成指针不旋转)
_second=myDate.getSeconds()*6;//获得当前秒数,每一秒增加6度
_minute=myDate.getMinutes()*6;//获得当前分数,每一分增加6度
_hour=myDate.getHours()*30;//获得当前小时数,每一小时增加30度
_root.miao._rotation=_second;//将指针度数赋予每个指针
_root.fen._rotation=_minute;
_root.shi._rotation=_hour

}
如果还是不正确的话,可把源文件发到[email protected],在具体研究

热点内容
python解压zip 发布:2025-02-12 09:08:46 浏览:921
如何加强人员配置 发布:2025-02-12 09:07:54 浏览:417
lol一区为什么服务器好卡 发布:2025-02-12 09:02:22 浏览:629
安卓运营商cm是哪个版本 发布:2025-02-12 09:00:00 浏览:515
pythonmd5校验 发布:2025-02-12 08:51:00 浏览:470
编程题解析 发布:2025-02-12 08:40:30 浏览:454
bilibi手机缓存目录在 发布:2025-02-12 08:33:11 浏览:458
听ti密码是多少 发布:2025-02-12 08:22:15 浏览:289
淘宝上传视频凭证 发布:2025-02-12 08:06:46 浏览:879
java画 发布:2025-02-12 08:01:00 浏览:550