以子弹为原点,发射射线,如果射线检测到障碍物,则返回射线与障碍物的碰撞点
在该点处实例化出弹孔贴图
1 void Update () { 2 transform.Translate (Vector3.forward * Speed * Time.deltaTime); 3 //用射线检测,子弹的碰撞,当物体在两点之间产生的射线内时,算作发生碰撞 4 //1.获得射线的起点(原点) 5 //2.获得射线的方向 6 //3.获得射线的距离 7 Vector3 oriPos = transform.position;//1.射线的起点 8 Vector3 direction = transform.position - oriPos;//2.方向 9 float ength = (transform.position - oriPos).magnitude;//3.射线的距离,取向量的大小 10 //光线投射碰撞 11 RaycastHit hitinfo;//存储碰撞信息 12 //光线投射,检测是否发生碰撞 13 bool isCillider = Physics.Raycast (oriPos,direction,out hitinfo,ength); 14 15 16 //在碰撞点生成弹孔贴图 17 if (isCillider) { 18 //射线检测到物体,执行以下动作 19 int index = Random.Range(0,2);//随机生成0||1 20 GameObject bulletHolePrefab = bulletHoles[index]; 21 Vector3 pos = hitinfo.point;//撞击点 22 pos.y += 0.5f;//向上移动,防止与物体平面重叠 23 GameObject go = GameObject.Instantiate(bulletHolePrefab,pos,Quaternion.identity) as GameObject; 24 //调整贴图的方向 25 //使弹孔贴图,贴于物体平面,与平面平行 26 go.transform.LookAt(hitinfo.point - hitinfo.normal); 27 } 28 }
时间: 2024-11-05 22:33:31