代码人生的小狗窝

一行行枯燥的代码,却描绘出人生的点点滴滴

您现在的位置是:首页>_开源软件

十分钟带你制作unity3d第一人称射击

发布时间:2019-11-22浏览(1351)

    十分钟带你打造unity3d第一人称射击



    那抱歉,上次那个Unity+kinect还没有更新,最近在深一步研究,不久将更新(绝对不负众望)!现在进入正题,十分钟带你打造unity3D第一人称射击游戏!

    看完本篇博客,你将学会第一人称控制,粒子的添加,碰撞的检测,鼠标的监听,画2d图像,预制物体克隆,添加力,添加声音等等!(本篇博客假设你已经对unity稍微有点了解)

    一,打开unity,创建一个场景,添加一个plane,(gameobject->createother->plane)。

    二,添加虚拟第一人称任务(现在没搞模型,模型后面可以自己添加);Assert->importpackages->Charactercontroll,之后你将Project面板里面看到这个资源包,打开里面的charactercontroll文件,将里面的first Person controll拖动到合适的位置。

    三,然后我们将添加一个虚拟的枪口,作为子弹的发生点!这个你可以创建一个椭圆,放在摄像机的最中间


     然后要将椭圆设置为摄像机的子物体,这样他将随着摄像机运动(不能设置为任务模型的子物体,因为任务模型的不能上下移动,也就不是这样后不能上下射击)。也就是在hierahcry面板中点击你创建椭圆,拖到摄像机上,这样他就成了摄像机的子物体。可以点击运行测试下,你会发现这东西只是虚拟枪口,所以我们设置它看不见,点击椭圆,在修改面板上,有个MeshRender,你单击下,椭圆就看不见了,但是它存在,然后再点击CapsuleColisder,取消他的碰撞(以免影响子弹的射击);
    三,子弹的射击

    我们首先创建一个圆,(用这个圆来模拟子弹,如果你自己有子弹模型,就用子弹模型),然后在project中创建一个prefab,用于之后的克隆子弹,现在我们来子弹一点火焰效果,Assert->importpackage->particles导入粒子,点击里面的fire,将里面的Flame拖到游戏中,位置和你创建的球(子弹)一样,然后将你设置的,然后同样的方法,将火焰设置为,子弹的子物体,这样,火焰将和子弹一起运动,自己在属性面板里 修改火焰的大小,然后将子弹拖到你创建的prefab中,修改prefab的名字为balls!添加一个刚体属性,Rigidbody(Addcomment->ragidbody)然后删除游戏中的子弹(嗯,删除)!现在子弹的预制物体已经创建好了,现在我们来射击!

    四 ,点击鼠标,发生子弹

    现在 就是敲代码码的时候了

    var aim:Transform;
    //克隆子弹
    private var ball:Transform;
    //绘制准星的材质
    var material:Material;
    function Start () {
    
    }
    
    function Update () {
    //将鼠标的图标隐藏
    Screen.showCursor=false;
    //var zj=Vector3(Screen.width/2,Screen.height/2,0);
    //var ray:Ray=Camera.main.ScreenPointToRay(Input.mousePosition);
    //定义一个方向,为发射点y轴方向
    var dir=aim.transform.TransformDirection(Vector3.up);
    //var dir=ray.direction;
    //按下鼠标左键
    if(Input.GetMouseButtonDown(0)){
    //实列化一个球,发射点的位置,
    ball=Instantiate(balls,aim.position,Quaternion.identity);
    //在某一个方向加一个力
    ball.rigidbody.AddForce(dir.normalized*1000);
    print("----------->>>");
    //三秒后删除小球
    Destroy(ball.gameObject,3);
    }
    }

     这里用到了,Screen.showCursor=false;将鼠标隐藏,要将他放在updatae中,放在start中不行var dir=aim.transform.TransformDirection(Vector3.up);这是定义一个方向,子弹将以这个方向射击

    其他的没什么解释的了,注释很详细了,方法里面传入的参数,查一下API文档就行

    五 ,现在们开始绘制准星

     

    //绘制准星的材质

    var material:Material;

    先定义 一个材质,用来绘制图像

     

    //绘制准星
    function OnPostRender(){
    DrawRecent(Screen.width/2,Screen.height/2,10,10);
    }
    //绘制四边形的方法
    function DrawRecent(x:float,y:float,width:float,height:float){
    //材质通道设置为默认的0
     material.SetPass(0);
     //绘制2D图形
      GL.LoadOrtho();
     //绘制长方体
     GL.Begin(GL.QUADS);
     //传入四个点的相对屏幕的坐标,先后分别是左上角,左下角,右下角,右上角
      GL.Vertex(new Vector3(x/Screen.width,y/Screen.height,0));
      GL.Vertex(new Vector3(x/Screen.width,(y+height)/Screen.height,0));
      GL.Vertex(new Vector3((x+width)/Screen.width,(y+height)/Screen.height,0));
      GL.Vertex(new Vector3((x+width)/Screen.width,y/Screen.height,0));
      //结束绘画
      GL.End();
    }

     这个没什么好解释的,注释有,按照各个规则就是

     

    然后就是,如果你射击到了敌人,敌人就着火

    四,射击敌人

    首先我们,创建几个cube,这个用来模拟敌人,如果你有好的模型,就用模型。给cube创建ridibody

    然后给它一个标签,在属性面板上面有个Tag,点击,选择player,给个player标签,你也可以点击addTag自己添加一个Tag,现在我们创建一个prefab预制火火焰,创建一个空物体,将先前导入的fires拖到空物体中

    将空物体放入prefab中,改名为fires

    现在 我们添加碰撞事件

    新建一个脚本,

     

    #pragma strict
    //预制火焰
    var fires:Transform;
    //克隆火焰
    private var fire:Transform;
    function Start () {
    
    }
    
    function Update () {
    
    }//碰撞监听
    function OnCollisionEnter(other:Collision){
    //如果碰到的事cube(先前我们将cube的tag设置成了player)
    if(other.transform.tag=="Player"){
    //克隆一个火焰
    fire=Instantiate(fires,other.transform.position,Quaternion.identity);
    //设置火焰的父对象为箱子,这样火焰将和物体一起运动,
    fire.transform.parent=other.transform;}
    }

     五,你想加入声音嘛?如果你想,接着看两种方式添加音乐,首先添加背景音乐,点击摄像机,AddCommpent->aduio->aduiosource

     

    首先 下载你需要的背景音乐,将音乐拖进Asset文件夹中,然后将音乐拖进刚才添加的aduiosource的中

    然后 教你添加动作音效,在第一和代码中加入var music:AudioClip;

    然后再发生子弹的那个方法中,AudioSource.PlayClipAtPoint(music,transform.position);播放,

    六:挂载脚本

    你首先将以第一个脚本,挂到摄像机上面,然后将第一个frefab(balls)拖到变量中

    第二个脚本放在balls上,将fires和音乐拖到变量中!!

    OK!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 现在开火!!!!!!!!!

     

     

     

    源码下载