Unity3D自带案例AngryBots分析(二)——人物动作控制逻辑

        Unity3D将自带demo放在C:\Users\Public\Documents\Unity Projects\4-0_AngryBots中,可以在open project中直接选择,或者从该目录中Assets双击AngryBots进入即可。

    在Hierarchy视图中选中Player及展开Player下面的子对象,选中各对象,可以在Inspector中看到相关对象上挂有的脚本及其他components。Transform是每个对象都有的,负责存储位置、方向、缩放因子,因而负责对象的平移、旋转、缩放等变换;Capsule Collider为人物添加了不可触发事件的无摩擦碰撞器;Rigidbody使人物置于物理因素作用下,没有空气阻力,设置扭矩和重力,防止快速移动穿越其它object设置的离散碰撞检测。该组件提供了按照物理属性来改变人物的Transform的能力,更具有真实效果,FreeMovementMotor.js中必须有Rigidbody,操作的就是刚体;player_root对象完成了人物整个身体骨骼的搭建;Skinned Mesh Renderer能展示阴影效果、设置了血条(healthbar_player)和人物外表(play-01-default)材质,影响顶点最大骨骼数auto,设置offscreen的范围,添加了main_player_lorez的Mesh。


人物动作控制脚本分析如下:

MovementMotor.js:包含三个变量

#pragma strict
@HideInInspector
public var movementDirection : Vector3;

@HideInInspector
public var movementTarget : Vector3;

@HideInInspector
public var facingDirection : Vector3;

 
  • #pragma strict为js中强制使用静态类型,禁用动态类型,输入变量时必须明确指定变量类型不能让编译器自己去推测类型。
  • @HideInInspector为编译器属性,作用是使变量不会显示在Inspector中,但是会被实例化。
  • movementDirection为角色世界坐标系中的移动方向,该向量长度应该保持0~1内。
  • movementTarget为在仅有目标的情况下使用,来驱动角色向目标前进。
  • facingDirection为角色在世界坐标系中面朝的方向。

    一般情况是,有了target则使用movementTarget来控制变换,而movementDirection和facingDirection一般都一起使用,两者合在一起驱动角色的运动。该脚本主要用于刚体控制物体的移动旋转时用到,使用起来更像接口,适用于完成人物、敌人、各种实体的运动控制。

FreeMovementMotor.js:

#pragma strict
@script RequireComponent (Rigidbody)//强制添加一个Rigidbody到这个object上,如果存在,则该Rigidbody不允许被删除。
class FreeMovementMotor extends MovementMotor {		
	public var walkingSpeed : float = 5.0;     //人物移动速度
	public var walkingSnappyness : float = 50; //人物移动影响因子
	public var turningSmoothing : float = 0.3; //人物旋转影响因子
	
	function FixedUpdate () {
		//处理人物移动
		var targetVelocity : Vector3 = movementDirection * walkingSpeed;//人物走动速度和移动方向融合得出移动速度
		var deltaVelocity : Vector3 = targetVelocity - rigidbody.velocity;//速度差值
		if (rigidbody.useGravity)
			deltaVelocity.y = 0;//重力会使人物不断降落,所以将y轴方向移动设置为0,则人物像我们期望的那样保持原高度。
		rigidbody.AddForce (deltaVelocity *
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值