目录
刚体
刚体
添加了好像不能禁用。
重力
重力,顾名思义。
禁用重力,不受重力影响。当有物体撞击,猜测会向撞击方向飞去。
isKinematic
如果启用了 isKinematic,则力、碰撞或关节将不再影响刚体。 刚体将由动画或脚本通过更改 transform.position 进行完全控制。 运动刚体也会通过碰撞或关节影响其他刚体的运动。 例如,可以将运动刚体连接到一个具有关节的普通刚体上, 则该普通刚体将受到运动刚体运动的约束。 对于制作通常由动画驱动,但在特定情况下,可以通过将 isKinematic 设置为 false 来快速转变为布娃娃的角色, 运动刚体也极其有用。
测试:一个带刚体组件(禁用动力学)的物体去撞击另一个带刚体组件(开启动力学)的物体。
结果:“不开”的撞不动“开的”。
再测试:相反用“开的”去撞“不开的”,能撞动。
碰撞检测
离散
持续:推荐“地面”等使用
连续动态:推荐“子弹”等使用
变换限制
锁xyz的位置、锁xyz轴的旋转。
碰撞
要两个物体都有碰撞组件才能发生碰撞;
实例:火星受重力下落,然后碰撞地面发生爆炸
火星有重力、碰撞组件;
地面有碰撞组件
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Boom_script : MonoBehaviour
{
public GameObject prefab;//后续操作预设体
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
//监听发生碰撞
private void OnCollisionEnter(Collision collision)
{
Instantiate(prefab, transform.position, Quaternion.identity);
Destroy(gameObject);
}
//持续碰撞
private void OnCollisionStay(Collision collision)
{
}
//结束碰撞
private void OnCollisionExit(Collision collision)
{
}
}
生成和销毁语句
Instantiate(Gameobject,位置,四元数旋转);
Destroy(GameObject);
获取到碰撞物的实体,输出它的某个信息。
private void OnCollisionEnter(Collision collision)
{
Instantiate(prefab, transform.position, Quaternion.identity);
Destroy(gameObject);
Debug.Log(collision.gameObject.name);
string name= collision.gameObject.name;
GetObj = GameObject.Find(name);
Debug.Log(GetObj.layer);
}
第一个参数是碰到的物体的名字
第二个参数是碰到的物体的层名字(数字是层序号)
碰撞和触发器的区别
1.物理特性。触发器是检测区域、结界、视野,不受物理特性影响。碰撞能返回碰撞的位置,受物理特性影响。
2.物理材质。有些物理材质在碰撞上会异常,但触发器不会出现异常(因为位置)。
3.函数名和返回参数不同。
4.实例。士兵拿剑去砍击,要剑碰到敌人才有伤害,属于碰撞。
铰链
铰链必须带刚体。
锚点和轴
调整旋转的位置和旋转轴
旋转位置(achor),长宽高都是1。起始点是(0,0,0)。
旋转轴(axis),看是绕着哪个轴旋转。(0,1,0)绕着Y轴。
旋转速度
弹簧组件
示例:上面方块固定,下面方块通过弹簧连接上面方块。开始后方块因重力掉下,之后一弹一弹,最后静止。
上方块:添加刚体(启用动力学);添加弹簧组件(spring joint),连接体添加为下方块。
下方块:添加刚体(启用重力)。
固定关节组件
在负责拉人的对象上用,将拉的人添加到连接体上。
定制摩擦力面
动态摩擦力
静态摩擦力
弹力
摩擦力是防止表面相互滑落的量。尝试堆叠对象时,此值很重要。摩擦力有两种形式:动态和静态。对象静止时使用__静态摩擦力。静态摩擦力会阻止对象开始移动。如果向对象施加足够大的力,对象将开始移动。随后,__动态摩擦力__将发挥作用。动态摩擦力__现在将尝试在与另一个对象接触时减慢对象的速度。
在碰撞组件中应用