【Unity3D】枪战游戏

您所在的位置:网站首页 子弹发射图片手绘 【Unity3D】枪战游戏

【Unity3D】枪战游戏

2024-07-13 13:52| 来源: 网络整理| 查看: 265

一、子弹的碰撞检测:

    因为子弹的移动速度非常的快,那么如果为子弹添加一个collider,就有可能检测不到了。

    因为collider是每一帧在执行,第一帧子弹可能在100米处,那么下一帧就在900米处了,

    那么中间的障碍物就不能被检测到了。

  所以就需要射线检测:

    在每一帧的执行,都向上一帧发射射线,不断地检测射线中是否有穿过的障碍物体  

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 if (isCillider) { 15 //射线检测到物体,执行以下动作       }

 

二、子弹的生成

  首先想到的是在枪口生成子弹,然后使子弹发生移动

  如果是这样的话,玩家就不能指哪打哪

  所以需要在屏幕的正中央,来生成子弹

  依旧运用射线,让子弹延射线方向移动

    获得屏幕中央作为射线原点

    发射射线

    如果射线碰撞到物体,返回该点,确定原点与该点的方向,子弹沿该方向移动

    如果没有,则目标点为从原点向前移动一定距离,作为目标点,确定方向,子弹沿该方向移动

1 //开始射击 2 void Shoot(){ 3 //闪光 4 flashcol.Flash (); 5 //生成子弹 6 //GameObject.Instantiate (bulletPrefab, fllow.transform.position, fllow.transform.rotation); 7 GameObject go = GameObject.Instantiate (bulletPrefab,transform.position,Quaternion.identity) as GameObject ; 8 //获得屏幕中心位置,转化为世界坐标 9 Vector3 point = soliderCamera.ScreenToWorldPoint (new Vector3 (Screen.width / 2, Screen.height / 2,0)); 10 //定义射线 11 RaycastHit hitinfo; 12 //发射射线 13 bool isCollider = Physics.Raycast (point, soliderCamera.transform.forward/*相机前朝向*/, out hitinfo); 14 if (isCollider) { 15 //如果射线撞击到了物体 16 go.transform.LookAt (hitinfo.point); 17 } else { 18 //如果射线没有撞击物体 19 //那么朝向1000米外的目标点 20 point += soliderCamera.transform.forward * 1000; 21 go.transform.LookAt(point); 22 } 23 }

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3