概述
刚体
使用刚体移动物体Rigidbody.MovePosition(Vector3)
r_Rigidbody = gameObject.GetComponent<Rigidbody>();
r_Rigidbody.MovePosition(r_transform.position + Vector3.forward * 0.5f);
使用刚体移动物体,物体是根据世界坐标系的方向移动的。
参数
MovePosition中的Vector3要使用“当前位置”+方向的方式。
Transform.Position
:属性当前物体的位置。
碰撞体
刚体常用方法
AddForce()
给刚体添加一个力,让刚体按“世界坐标系”进行运动Rigidbody.AddForce(Vector3,ForceMode);
private Rigidbody f_rigidbody = gameObject.GetComponent<Rigidbody>();
f_rigidbody.AddForce(Vector3.forward, ForceMode.Force);
ForceMode枚举值
Acceleration:(加速度)
Force:(力)这种模式通常用于设置真实的物理
Impulse:(冲击力)这种模式通常用于瞬间发生的力
VelocityChange:(速度的变化)
AddRelativeForce()
给刚体添加一个力,让刚体按“自身坐标系”进行运动。Rigidbody.AddRelativeForce(Vector3,ForceMode);
f_rigidbody.AddRelativeForce(Vector3.forward, ForceMode.Force);
//为了避免球来回滚动(自身坐标系不断变化而导致的)
if (Input.GetKeyDown(KeyCode.Space))
{
f_rigidbody.AddRelativeForce(Vector3.forward * 1000, ForceMode.Force);
//只给一次力所以要很大
}
FixedUpdate()
所有和物理相关的操作,代码都要写在FixedUpdate()
方法体内。
固定更新的时间间隔是0.02秒,1秒执行50次。可在Edit-->ProjectSettings-->Time
面板中的FixedTimestep
参数设置。
Update()
方法是每帧执行一次。 画面每渲染完一次,就是一帧,每帧的时间是不固定的。- 在
Update()
方法中执行物理操作,会出现卡顿的情况。
刚体碰撞事件监测与处理
碰撞事件
当一个用刚体控制的物体与另外一个物体碰撞时,就会触发碰撞事件。
注:目标物体必须带有Collider组件。
碰撞事件监测方法
1.OnCollisionEnter(Collision)
当碰撞开始时调用,只会调用该方法一次。
2.OnCollisionExit(Collision)
当碰撞结束时调用,只会调用该方法一次。
3.OnCollisionStay(Collision)
当碰撞进行中时,会持续调用该方法。
4.Collision
参数
Collision.gameObject
属性,与当前物体碰撞的物体的引用。
gameObject.name
属性,当前物体的名字。
//这三个方法和start(), update()同级别
void OnCollisionEnter(Collision coll){
Debug.Log("撞到了" + coll.gameObject.name);
}
void OnCollisionStay(Collision coll){
Debug.Log("接触" + coll.gameObject.name);
}
void OnCollisionExit(Collision coll){
Debug.Log("溜了溜了");
}
触发事件
触发器
将碰撞体组件属性面板上的“IsTrigger”选项选中,当前的游戏物体的碰撞体就变成了触发器。
- 移动的刚体物体会穿透碰撞体勾选了“IsTrigger”的物体。
触发事件
当一个用刚体控制的物体进入到另外一个物体的触发器范围内,就是触发事件。
- 用途:不与目标物体发生直接的碰撞(接触),而是只要进入目标物体的“触发范围”就能执行某些特定操作。
触发事件监测方法
1.OnTriggerEnter(Collider)
当进入触发范围时开始时调用,只会调用该方法一次。
2.OnTriggerExit(Collider)
当离开触发范围时开始调用,只会调用该方法一次。
3.OnTriggerStay(Collider)
在触发范围内,会持续调用该方法。
4.Collider
参数
Collider.gameObject属性,进入触发范围内的目标物体的引用。
gameObject.name属性,当前物体的名字。
//这三个方法和start(), update()同级别
void OnTriggerEnter(Collider coll){
Debug.Log("接触到了" + coll.gameObject.name);
}
void OnTriggerStay(Collider coll){
Debug.Log("接触" + coll.gameObject.name);
}
void OnTriggerExit(Collider coll){
Debug.Log("溜了溜了");
}
最后
以上就是生动哈密瓜为你收集整理的unity学习笔记(4)--刚体碰撞刚体碰撞体刚体常用方法刚体碰撞事件监测与处理的全部内容,希望文章能够帮你解决unity学习笔记(4)--刚体碰撞刚体碰撞体刚体常用方法刚体碰撞事件监测与处理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复