预设体
定义:预设体就是现有游戏对象的克隆体。
创建:将游戏对象拖到Asset窗口即可创建,此时会在文件夹Assets中多处一个.prefab文件。
加载:
有两种方式,一是在编辑器中可以直接拖拽预设体拖至场景中;二时使用代码动态加载:
GameObject objPrefab = (MonoBehaviour.Instantiate(fab, Vector3.zero, Quaternion.identity) as GameObject);
GameObject objPrefab = (GameObject)Resources.Load("Prefabs/fabname");
前者fab是MonoBehaviour的公共成员变量,通过把Resources/Prefabs/myPrefab拖动过来赋值;
后者fabname是Resources/Prefabs 下的预制文件名。
实例化:
可以通过Instantiate方法来创建新的游戏对象,其有如下重载:
public static Object Instantiate(Object original);
public static Object Instantiate(Object original, Transform parent);
public static Object Instantiate(Object original, Transform parent, bool worldPositionStays);
public static Object Instantiate(Object original, Vector3 position, Quaternion rotation);
public static Object Instantiate(Object original, Vector3 position, Quaternion rotation, Transform parent);
刚体
在编辑器中给游戏对象添加组件Rigidbody,可以通过如下方法获取:
Rigidbody rb = GetComponent();
下面是编辑器中提供可以调整的选项,括号中是组件的成员变量:
Mass(mass) 质量,表示多少单位
Dray(dray) 直线运动的空气阻力
Angular Dray(angularDray) 角阻力
Use Gravity(useGravity) 是否受重力
Is Kinematic(isKinematic) 是否使用动力学,不能跟Use Gravity同时勾选
Interpolate 插值
Collision Detection 碰撞检测方式
Constraints 禁止某个方向的直线或旋转运动
using UnityEngine;
using System.Collections;
public class Cube : MonoBehaviour {
public Rigidbody rb;
void Start () {
rb = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update () {
if (Input.GetKeyDown(KeyCode.Alpha1)) {
// 给游戏对象施加一个力 -> Y轴正向移动
// rb.AddForce(new Vector3(0f, 10f, 0f));
// 给游戏对象施加一个力矩 -> Y轴旋转
// rb.AddTorque(new Vector3(0f, 10f, 0f));
// 给游戏对象在指定位置添加一个力
// rb.AddForceAtPosition(new Vector3(0f, 10f, 0f),new Vector3(0.5f, 0.5f, 0.5f));
// 在指定位置添加一个爆炸力
// rb.AddExplosionForce(100f, Vector3.zero, 4f);
}
}
}
碰撞体大小可以在编辑器中调整;
Unity默认提供了各种形状的碰撞组件,其中网格膨胀器可以使用自定义网格指定碰撞形状;
碰撞事件
void OnCollisionEnter(Collision other) {} 碰撞开始
void OnCollisionStay(Collision other) {} 碰撞持续
void OnCollisionExit(Collision other) {} 碰撞结束
void OnTriggerEnter(Collider other){} 进入触发范围时调用
void OnTriggerStay(Collider other){} 持续在触发范围时调用
void OnTriggerExit(Collider other){} 离开触发范围时调用