以子弹为原点,发射射线,如果射线检测到障碍物,则返回射线与障碍物的碰撞点

  在该点处实例化出弹孔贴图

 void Update () {
transform.Translate (Vector3.forward * Speed * Time.deltaTime);
//用射线检测,子弹的碰撞,当物体在两点之间产生的射线内时,算作发生碰撞
//1.获得射线的起点(原点)
//2.获得射线的方向
//3.获得射线的距离
Vector3 oriPos = transform.position;//1.射线的起点
Vector3 direction = transform.position - oriPos;//2.方向
float ength = (transform.position - oriPos).magnitude;//3.射线的距离,取向量的大小
//光线投射碰撞
RaycastHit hitinfo;//存储碰撞信息
//光线投射,检测是否发生碰撞
bool isCillider = Physics.Raycast (oriPos,direction,out hitinfo,ength); //在碰撞点生成弹孔贴图
if (isCillider) {
//射线检测到物体,执行以下动作
int index = Random.Range(,);//随机生成0||1
GameObject bulletHolePrefab = bulletHoles[index];
Vector3 pos = hitinfo.point;//撞击点
pos.y += 0.5f;//向上移动,防止与物体平面重叠
GameObject go = GameObject.Instantiate(bulletHolePrefab,pos,Quaternion.identity) as GameObject;
//调整贴图的方向
//使弹孔贴图,贴于物体平面,与平面平行
go.transform.LookAt(hitinfo.point - hitinfo.normal);
}
}
04-27 01:17