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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40695551/article/details/78503630

   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 (音频对象,音量).





猜你喜欢

转载自blog.csdn.net/qq_40695551/article/details/78503630