预设体能够使游戏对象和资源重复使用,相同的游戏对象可以使用同一个预设体来创建,对预设体进行修改后,所有游戏对象都会相应改变。
在SampleScene中创建一个3D模型,命名player,然后在Assets中创建一个材质球拖到Scene中的player上,最后将SampleScene中的player拖入到Assets中,这样在Assets中的player就是预设体。可以通过改变刚刚那个材质球来改变预设体的属性,也可以通过拖拽预设体来在场景中添加相应的player。
在Assets中Create一个C#脚本,然后直接拖拽到预设体的属性面板上即可。同时在预设体中挂载脚本也会使其他通过预设体产生的player身上挂载上相应的脚本。
在预设体的控制面板中进行设置,都会将对应设置辐射到所有预设体产生的player。
Select:将预设体进行高亮选中;
Revert:将对player的设置还原;
Apply:任意一个预设体产生的player进行设置都是独立的,当进行Apply操作时就会把这个player的sh设置应用到预设体上,进 而所有通过预设体ch产生的player都会有相应的操作。
首先在项目中添加一个空对象,一般都是可以改名叫GameController,可以挂载不同的脚本进行游戏的控制。
用预设体创建对象,首先要获取这个预设体,要把这个游戏对象通过公共字段la来获取。
public GameObject playerPrefab;
脚本中会出现一个属性栏,属性栏中需要一个Game Object类型的资源,然后直接把player的预设体直接拖拽到这个属性栏中。
这样这个脚本就获取了相应的预设体。
然后通过Instantiate()方法进行创建对象。
Instantiate(playerPrefab); //将playerPrefab当做预设体进行创建游戏对象
这种方法创建的游戏对象都在同一个位置,如果想要创建不同位置的游戏对象,而且随机分布在一个范围内也是可以的。
Instantiate(playerPrefab, pos, Quaternion.AngleAxis(angle, Vector3.up)); // 预设体对象;创建的初始位置;创建出初始旋转角度
同时这个方法可以返回一个object的值,我们用GameObject类型进行接收,用as进行转换。
GameObject p = Instantiate(playerPrefab, pos, Quaternion.AngleAxis(angle, Vector3.up)) as GameObject;
这样之后p就是一个GameObject类型的对象,可以用之前的Addcomponent等方法。
这个鼠标事件和Input方法的不同之处主要在目标不同,即鼠标事件要触发必须在某一个游戏对象内进行,但是Input是只要检测到鼠标点击动作进行就会触发。
游戏对象的刚体属性是让对象可以受到力的作用。可以在属性面板中的Add Component进行搜索添加。
Mass:质量(相对单位)
Drag:空气阻力
Angular Drag:角阻力
Use Gravity:是否使用重力
Is Kinematic:是否使用动力学
Interpolate:使用差值 (Interpolate:内差值(通过当前帧的上一帧来推算);Extrapolate:外差值(通过预测后一帧的位置来 推现在))
Collision Detection:碰撞检测
Constraints:约束(可以冻结不同方向力的作用)
下面这些方法是属于Rigidbody中的方法,使用之前要用Rigidbody类型的变量来获取相应组件。
碰撞相关的有三个事件:
具有Collision和刚体属性的对象和任何有Collision的对象都会产生一次事件,包括地面。
触发器相关的三个事件: