Unity之路(六):预设体和刚体

预设体

定义:预设体就是现有游戏对象的克隆体。

创建:将游戏对象拖到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){} 离开触发范围时调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值