Unity3D 简单的动画

这个挺繁杂,嘿嘿,主要是为自己记录下啦。大家只需要注意下crossFade和animation的相关函数就可以了。

#pragma strict

private var Controller : CH_Character;
private var Controller_other : CH_Controller;
public var forwardSpeed : float = 5.0;
public var backwardSpeed : float = 3.0;
public var strafingSpeed : float = 4.0;
public var runningSpeed : float = 10.0;
public var idleAnimationSpeed : float = 1.0;
public var forwardAnimationSpeed : float = 6.0;
public var runningAnimationSpeed : float = 3.0;
public var backwardAnimationSpeed : float = 1.0;
public var strafingAnimationSpeed : float = 3.0;
public var jumpingAnimationSpeed : float = 1.5;
public var ShootingAnimationSpeed : float = 1.0;

function Start () {
	animation.AddClip(animation["shoot"].clip, "shootUpperBody");
	animation.AddClip(animation["shoot2"].clip, "shootUpperBody2");
	animation["shootUpperBody"].AddMixingTransform(transform.Find("COG/Spine"));
	animation["shootUpperBody2"].AddMixingTransform(transform.Find("COG/Spine"));
	animation["idle"].layer = -1;
	animation["run"].layer = -1;
	animation["jump"].layer = -1;
	animation["walk_forward"].layer = -1;
	animation["walk_backward"].layer = -1;
	animation["walk_side"].layer = -1;
	animation.wrapMode = WrapMode.Loop;
	animation["jump"].wrapMode = WrapMode.ClampForever;
	animation["shoot"].wrapMode = WrapMode.Once;
	animation["shoot2"].wrapMode = WrapMode.Once;
	animation["shootUpperBody"].wrapMode = WrapMode.Once;
	animation["shootUpperBody2"].wrapMode = WrapMode.Once;
	animation["idle"].speed = idleAnimationSpeed;
	animation["walk_forward"].speed = forwardAnimationSpeed;
	animation["run"].speed = runningAnimationSpeed;
	animation["walk_backward"].speed = backwardAnimationSpeed;
	animation["walk_side"].speed = strafingAnimationSpeed;
	animation["jump"].speed = jumpingAnimationSpeed;
	animation["shootUpperBody"].speed = ShootingAnimationSpeed;
	animation["shootUpperBody2"].speed = ShootingAnimationSpeed;
	animation.Stop();
	animation.Play("idle");
}

function DetermineDirection () {
	if (Controller_other.bIsShooting) {
		if (!animation.IsPlaying("shootUpperBody"))
			animation.Play("shootUpperBody");
	}
	if (Controller_other.bIsShootingAlt) {
		if (!animation.IsPlaying("shootUpperBody2"))
			animation.Play("shootUpperBody2");
	}
	if (Controller.inAir) {
		if (!Controller.jumpClimax) {
			animation.CrossFade("jump", 0.5, PlayMode.StopSameLayer);
		}
		else {
			animation.Rewind("jump");
		}
	}
	else if (Controller.MoveDirection == Vector3.zero) {
		animation.CrossFade("idle");
	}
	else if (Controller.MoveDirection.z > 0) {
		if (Controller.isRunning) {
			Controller.Speed = runningSpeed;
			animation.CrossFade("run", 0.5, PlayMode.StopSameLayer);
		}
		else {
			Controller.Speed = forwardSpeed;
			animation.CrossFade("walk_forward", 0.5, PlayMode.StopSameLayer);
		}	
	}
	else if (Controller.MoveDirection.z < 0) {
		Controller.Speed = backwardSpeed;
		animation.CrossFade("walk_backward", 0.5, PlayMode.StopSameLayer);
	}
	else if (Controller.MoveDirection.x > 0 || Controller.MoveDirection.x
		< 0) {
		Controller.Speed = strafingSpeed;
		animation.CrossFade("walk_side", 0.5, PlayMode.StopSameLayer);	
	}
}

function Awake () {
	Controller = this.gameObject.GetComponent(CH_Character);
	Controller_other = this.gameObject.GetComponent(CH_Controller);
}

function Update () {
	DetermineDirection();
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值