现在的位置: 首页 > 综合 > 正文

Unity3D脚本中文系列教程(四)

2013年09月12日 ⁄ 综合 ⁄ 共 5406字 ⁄ 字号 评论关闭

二、 运行时类
AnimationCurve

动画曲线,在给定的时间添加关键帧并确定曲线。
变量
◆  var
keys : Keyframe[]

描述:定义在动画曲线中的所有键。这让你从数组中清理,添加或移除键。
如果键没有按照时间顺序,它们会在赋值的时候自动排序。
◆  var
length : int

描述:曲线中键的数量(只读)。
◆  var
preWrapMode : WrapMode

描述:第一帧之前动画的行为。
◆  var
this[index : int] : Keyframe

描述:取向索引为index的键(只读)。
构造函数
◆  static
function AnimationCurve(params keys : Keyframe[]) : AnimationCurve

描述:从任意数量的关键帧创建一个动画曲线。
该函数从可变数量的Keyframe参数创建一个曲线,如果你想从一个关键帧数组中创建一个曲线,创建一个空的曲线并指定keys属性。
//一个慢退慢出的动画曲线(切线都是平的)。
var curve = new AnimationCurve(Keyframe(0, 0), Keyframe(1, 1);
function Update ()
{
transform.position.x = Time.time;
transform.position.y = curve.Evaluate(Time.time);
}
◆  static
function AnimationCurve () : AnimationCurve

描述:创建一个空的动画曲线
函数
◆  function
AddKey (time : float, value : float) : int

描述:添加一个新的键到曲线。
平滑切线将被自动为该键的计算,返回该键的索引,如果因为在同一时间上已经有另一个关键帧而不能添加键,将返回-1。
◆  function
AddKey (key : Keyframe) : int

描述:添加一个新的键到曲线。
返回该键的索引,如果因为在同一时间上已经有另一个关键帧而不能添加键,将返回-1。
◆  function
Evaluate (time : float) : float

描述:该动画曲线在time的值。
◆  function
MoveKey (index : int, key : Keyframe) : int

描述:移除index处的关键帧并插入键。
如果一个关键帧已经存在于key-time,老的关键帧位置时间key[index].time/将被用来替换,这对于在一个曲线编辑器中拖动关键帧是一个理想的行为,移动它后返回关键帧的索引。
◆  function
RemoveKey (index : int) : void

描述:移除一个键
◆  function
SmoothTangents (index : int, weight : float) : void

描述:平滑位于index处的关键帧的进出切线。
权值为0时平均切线。
类方法
◆  static
function EaseInOut (timeStart : float, valueStart : float, timeEnd : float, valueEnd : float) : AnimationCurve

描述:一个渐进渐出的曲线,开始于timeStart,valueStart并结束于timeEnd, valueEnd.
◆  static
function Linear (timeStart : float, valueStart : float, timeEnd : float, valueEnd : float) : AnimationCurve

描述:一个直线,开始于timeStart,valueStart并结束于timeEnd, valueEnd.
AnimationEvent

AnimationEvent类似于SendMessage让你调用一个脚本函数,这个脚本是动画播放的一部分。
变量
◆  var
animationState : AnimationState

描述:引发这个事件的动画状态。
当这个方法在动画事件回调之外被调用用时返回null。
◆  var
date:string

描述:存储在动画剪辑中的字符串数据并将被发送到动画事件。
◆  var
functionName : string

描述:被调用的函数的名称
这与调用gameObject.SendMessage(animationEvent.functionName,animationEvent)相同;
◆  var
messageOptions :SendMessageOptions

描述:如果选项被设置为SendMessageOptions.RequireReceiver(缺省),当消息没有被任何组件接收时将打印一个错误消息。
◆  var
time:float

描述:该事件被引发的时间。
构造函数
◆  static
function AnimationEvent () : AnimationEvent

描述:创建一个新的动画事件
AnimationState

AnimationState完全控制动画混合。
在大多数情况下Animation接口就足够了,并且更容易使用。如果你需要完全控制动画播放过程中的混合时,使用AnimationState。
当动画播放时,AnimationState允许你修改速度,权值。时间和层。也可以设置动画合成和wrapMode
动画
变量
◆  var
blendMode : AnimationBlendMode

描述:使用哪个混合模式?
// 设置leanLeft动画为附加混合
animation["leanLeft"].blendMode = AnimationBlendMode.Additive;
◆  var
clip :AnimationClip

描述:该动画状态播放的剪辑。
// 打印动画剪辑的帧频到控制台
print(animation[“walk”]clio.frameRate);
◆  var
enabled : bool

描述:启用/禁用动画
对于需要考虑任何影响的动画,权值需要设置成为一个大于零的值。如果动画被禁用,时间将暂停直到动画再次启用。
// 启用walk循环
animation["Walk"].enabled = true;
animation["Walk"].weight = 1.0;
◆  var
layer : int

描述:动画的层。在计算混合权值时,位于较高层的动画将首先获得它们的权值。
只有较高层的动画没有使用完全全部权值时,较低层的动画才能接收混合权值。
// 放置walk和run动画在层1
animation["Walk"].layer = 1;
animation["Run"].layer = 1;
◆  var
length : float

描述:动画剪辑的长度,以秒计。
// 打印Walk动画的长度
print (animation["Walk"].length);
◆  var
name :string

描述:动画的名称。
◆  var
normalizedSpeed : float

描述:归一化播放速度。
这最常用于混合两个动画时同步播放速度。在多数情况下使用animation.SyncLayer是更容易也更好
// 同步run和walk速度
animation["Run"].normalizedSpeed = animation["Walk"].speed;
◆  var
normalizedTime : float

描述:动画的当前归一化时间。
1为动画的末端。 0.5为动画的中部。
// 快进到动画的中部
animation["Walk"].normalizedTime = 0.5;
◆  var
speed : float

描述:动画的播放速度。1为正常播放速度。
负的播放速度将回放动画。
// 向后走
animation["Walk"].speed = -1.0;
// 以双倍速度行走
animation["Walk"].speed = 2;
◆  var
time :float

描述:动画的当前时间
如果时间大于长度它将按照wrapMode回绕。该值可以大于动画的长度。看这种情况下播放模式将在采样前重映射时间。这个值从0到无穷。
// 回退walk动画
animation["Walk"].time = 0.0;
◆  var
weight : float

描述:动画的权值
// 设置walk动画的混合权值为0.5
animation["Walk"].weight = 0.5;
◆  var
wrapMode : WrapMode

描述:动画的回绕模式
默认的wrapMode被初始化为在Animation组件中设置的回绕模式值。
// 设置walk动画回绕模式为循环
animation["Walk"].wrapMode = WrapMode.Loop;
函数
◆  function
AddMixingTransform (mix : Transform, recursive : bool = true) : void

描述:添加应该被动画的变换。这允许你缩减需要创建的动画数量。
例如你可能有一个挥手的动画。你可能想在一个空闲角色或行走的角色上播放挥手动画。那么你需要为空闲和行走分别创建挥手动画。运用合成挥手动画,它将由肩膀完全控制。但是下半身不会受它的影响,继续播放空闲或行走动画。因此你只需要一个挥手动画。
如果recursive为真,所有mix变换的子也都将被动画。如果你不调用AddMixingTransform,所有动画曲线将被使用。
// 使用路径添加混合
var shoulder : Transform;
animation["wave_hand"].AddMixingTransform(shoulder);
function Start ()
{
//使用路径添加混合变换
var mixTransform = transform.Find("root/upper_body/left_shoulder");
animation["wave_hand"].AddMixingTransform(mixTransform);
}
Application

访问应用程序的运行时数据。
这个类包含静态的方法来查找相关的信息并控制运行时数据。
类变量
◆  static
var absoluteURL : string

描述:到web播放器数据文件夹的绝对路径(只读)。
Application.absoluteURL 和Application.srcValue允许你检测unityWeb数据文件是否被移动或链接接到其他位置。你也许想保护这两者来防止盗用数据文件的行为。
// 检测你的数据文件是否被移动到其他的服务器
// 或是被链接到其他地方
function Start ()
{
var isPirated = false;
if (Application.platform == RuntimePlatform.WindowsWebPlayer ||Application.platform == RuntimePlatform.OSXWebPlayer)
{
if (Application.srcValue != "game.unity3d")
isPirated = true;
if (String.Compare (Application.absoluteURL,http://www.website.com/Game/game.unity3d,true)!=0)
isPirated = true;
if (isPirated)
print("Pirated web player");
}
}
◆  static
var dataPath : string

描述:包含游戏数据文件夹的路径(只读)。
这个值依赖于运行的平台:
Unity 编辑器:     <工程文件夹的路径>/Assets
Mac播放器:       <到播发器应用的路径>/Contents
Win播放器:       <
包含可执行播发器的文件夹的路径>\Data

Dasboard窗口:    <
dashboard widget bundle的路径>

Web播放器:       到播放器数据文件夹的绝对路径(没有实际的数据文件名称)
// 打印到数据文件夹的路径
Print(Application.dataPath);
◆  static
var isEditor : bool

描述:是在Unity编辑器内运行?(只读)
如果游戏从Unity编辑器中运行,返回真;如果从其他部署目标运行返回假。
if (Application.isEditor)
{
print("We are running this from inside of the editor!");
}
◆  static
var isLoadingLevel : bool

描述:正在加载某些关卡?(只读)
LoadLevel 和 LoadLevelAdditive不会立即发生 一个新的关卡在当前游戏帧之后被加载。如果关卡加载所请求的帧已经完成isLoadingLevel返回true。
参见:LoadLevel,LoadLevelAdditive
◆  static
var isPlaying : bool

描述:在任何类型的播放器中时返回真(只读)。
在Unity编辑器中,如果处于播放模式时返回真。
if (Application.isPlaying)
{
print("In player or playmode");
}
◆  static
var levelCount : int

描述:可用的总关卡数(只读)。
// 加载一个随机的关卡

抱歉!评论已关闭.