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 *