Unity5权威讲解之菜鸟读书笔记(三)

来源:互联网 发布:linux文件系统书籍 编辑:程序博客网 时间:2024/06/05 23:46

   Unity5权威讲解之菜鸟读书笔记(三)

11. Rigidbody 组件是模拟碰撞等物理效果的重要组件,具备以下属性,如表所示。
属性含义Mass相对质量,其单位不是现实中的1kg.1g等。假设A物体的质量为1,B物体的质量为10,那么可以解释为“B物体的质量
是A物体的10倍”Drag用于移动的摩擦系数Angular Drag用于旋转的摩擦系数Use Gravity             是否模拟重力效果Is Kinematic如果勾选该属性,Unity 将不进行物理模拟使模型移动,而是通过Transtorm组件移动。也就是说,模型此时不受物理引擎的影响Interpolate 使用物理模拟时,模型如果发生停止暂停等现象,可以使用该属性使画面更为流畅。
Interpolate:使当前帧适应前一一顿的位置,使模型移动更自然
Extrapolate 推测下一顿的位置变化,使模型移动更自然Collision
Detection游戏中模型运动过快时,可能导致物理引擎来不及检测到碰撞。因此,该属性帮助引擎进行更细致的检测碰撞。检测顺序为Discrete- Continuous一Continuous DynamicFreere Position阳止模型义Y Z轴中某轴向上移动Freeze
Rotation阳止模型X、Y Z轴中以某一轴为基准旋转注意
将制作子弹所需的所有组件以及脚本不加到Bu let 游戏对象。需要注意,子弹模
型无需添加任何组件,因为它只是单纯的视觉模型。(父对象和子对象)


12.子弹脚本

using System.Collections;using System.Collections.Generic;using UnityEngine;public class BulletCtrl : MonoBehaviour {    //子弹破坏力    public int damage = 20;    public float speed = 100.0f;// Use this for initializationvoid Start () {        GetComponent<Rigidbody>().AddForce(transform.forward * speed);}// Update is called once per framevoid Update () {}}

函数:GetComponent<Rigidbody>().AddForce(transform.forward * speed);

13.Collider组件
碰撞感知条件:1.发生碰撞的两个游戏对象都要添加Collider组件。
                          2.两个游戏对象至少一方有Rigidbody 组件。
处理速度最快的Collider:Sphere Collider
顺序: Sphere Collider > Capsule Collider >Box collider.
碰撞事件表
函数名触发条件ls Trigger 选项void OnCollisionEnter两个物体间碰撞开始时否void OnCollisionStay两个物体间碰撞持续时否void OnCollisionExit两个物体分开时否void OnTriggerEnter两个物体间碰撞开始时是void OnTriggerStay两个物体间碰撞持续时是void OnTriggerExit两个物体分开时是 
On Trigger函数会贯穿物体(在游戏中主要用作传感器例如角色开滑动门等)
On collision函数只会碰撞物体(用于子弹等。。)

一个简单的碰撞函数
子弹射在墙上消失。
using System.Collections;using System.Collections.Generic;using UnityEngine;public class WallCtrl : MonoBehaviour {       private void OnCollisionEnter(Collision coll)    {        if (coll.collider.tag == "BULLET")        {            Destroy(coll.gameObject);//删除发生碰撞的物体                    }    }            }


14.子弹发射逻辑
*制作子弹发射位置(FirePos)
*检测并处理发射事件

子弹发射函数。
using System.Collections;using System.Collections.Generic;using UnityEngine;public class FireCtrl : MonoBehaviour {    public GameObject bullet;    public Transform firePos;//子弹发射坐标。    // Use this for initializationvoid Start () {              }// Update is called once per framevoid Update () {if(Input .GetMouseButtonDown(0))        {            Fire();        }}    void Fire()    {        CreateBullet();            }    void CreateBullet()    {        Instantiate(bullet, firePos.position, firePos.rotation );//动态生成子弹预设    }      }



15.播放音频的函数代码
private AudioSource source = null;public AudioClip fireSfxvoid start (){//获取组件后分配变量source = GetComponent <AudioSource>() ;}void fire (){source.PlayOneShot(fireSfx , 0.9f);}

AudioSource.PlayOneShot (音频对象,音量).





阅读全文
0 0
原创粉丝点击