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

   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 Dynamic
Freere 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 initialization
	void Start () {
        GetComponent<Rigidbody>().AddForce(transform.forward * speed);
	}
	
	// Update is called once per frame
	void 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 initialization
	void Start () {
       
       
	}
	
	// Update is called once per frame
	void Update () {
		if(Input .GetMouseButtonDown(0))
        {
            Fire();
        }
	}
    void Fire()
    {
        CreateBullet();
        
    }
    void CreateBullet()
    {
        Instantiate(bullet, firePos.position, firePos.rotation );//动态生成子弹预设

    }
   
   
}



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

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





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值