Unity 力、射线检测
1. AddRelativeForce相对于自身坐标系的力
2.
- cube0.AddForceAtPosition(Vector3.forward*5, target.transform.position);
force:给Cube0一个力,控制cube0的移动;
position:cube0和所给点的连线力得大小,这个力跟移动方向有夹角会造成cube0旋转;
案例:使用力的方式发射子弹,子弹方向为鼠标点击的方向,LineRenderer画弹道
Physics射线检测
new Ray(cube0.transform.position, Vector3.forward);
射线,第一个参数:射线的起始点; 第二个参数:射线的方向
- bool Physics.Raycast(myray)
物理射线监测;
返回值是bool类型,根据返回值只能确定当前射线有没有碰撞到其他碰撞体;
RaycastHit hit;
Bool Physics.Raycast(myray, out hit)
返回值只能返回是否碰撞到其他碰撞体;但是out出来一个hit值,这个hit值是我们需要的;
当我们射线碰撞到一个游戏物体的碰撞体后,返回一个hit值这个对象包含信息:
public Collider collider { get; } //碰撞体
public float distance { get; set; } //碰撞体和射线起始点的距离
public Vector3 normal { get; set; } // 碰撞点所在的平面的法向量
public Vector3 point { get; set; } //实际碰撞到的点的世界坐标位置
public Rigidbody rigidbody { get; }// 碰撞到的游戏物体的刚体
public Transform transform { get; } //碰撞到的游戏物体的Transform组件
Int 类型的参数是1左移对应层数所得来的,这样的操作可以一次监测到多个层的游戏物体;
5.一条射线碰撞到多个碰撞体;
案例:发射子弹生成弹痕
Physics 球形搜索
Collider[] OverlapSphere(Vector3 position, float radius, int layerMask);
Position:搜索的球心;
Radius: 搜索半径;
LayerMask:搜索层,满足一个十进制数控制多个二进制层;