【Unity开发实战】官方实例SURVIVAL SHOOTER开发心得

来源:互联网 发布:詹姆斯生涯数据最新 编辑:程序博客网 时间:2024/05/18 00:39

其实了解并学习Unity也有了差不多两个月了,之前知识了解一些基础知识,也看了一些官网的API,做了一些实例,但是并没有做过一个完整的游戏,最近在官网看到一个叫SURVIVAL SHOOTER的游戏,并且富有相关的资源和源码,还有英文教程。把项目下载下来看了一下,感觉是一个入门级的简单游戏,十分适合初学者。然后就观看了一下英文教程。博主英语较渣,只能听懂6成。但是看代码是没问题的。当时我也没有记录视屏中的代码,只是了解了一下思想。然后就开始了开发。大概折腾了一天的时间,终于把游戏开发好了。写这篇文章呢,主要是也对其中一些知识点的做一些记录。

控制主角的移动

其实控制移动应该是游戏开发中最基本的一种操作。在Unity中也提供了多种方式来提供开发者使用。下面列举两个比较常用的。

float xAxis=Input.GetAxis("Horizontal"); //获取水平坐标float zAxis=Input.GetAxis("Vertical"); //获取垂直坐标transform.Translate(new Vector3(xAxis,0,zAxis)*speed*Time*deltaTime)//根据指定的向量移动物体

这个算是最简单的一种移动方式了。当然transform.Translate方法有六个重载方式。每个重载方法都能实现主角的移动,大家可以去看官网的API,这里不做深究。

//获取刚体组件Rigidbody playerRigidbody = gameObject.GetComponent <Rigidbody > ( );//移动刚体到某个位置playerRigidbody.MovePosition ( transform .position + new Vector3 ( xAxis , 0, zAxis )* speed *Time . deltaTime );

使用这种方式的前提是当前的GameObject中必须要有刚体组件,否则将会报错。


相机跟随主角

相机跟随主角是每个游戏中都会涉及的功能,同样也有很多种方式,这里提供一种,仅供参考:

Vector3 targetPos = player.position + new Vector3 ( 0, 1.7f, -5.5f );//得到相机与主角的相对位置//两个向量之间的线性变化。按照t,在一秒内从form开始到to结束。transform.position = Vector3.Lerp ( transform.position,targetPos,smooth*Time.deltaTime);

这种方式使得相机跟随主角的时候更加的平滑。

控制主角的转向

我们要求主角会随着我们鼠标的位置的改变,而面向不同方向,就像CS一样。

  /*控制转向*/   Ray ray = Camera. main .ScreenPointToRay ( Input. mousePosition );//从鼠标通过屏幕上的一个点,产生一条射线   RaycastHit hitInfo ;//光线投射碰撞的信息   if (Physics . Raycast ( ray , out hitInfo, 200 , groundLayerIndex ))       {            Vector3 target = hitInfo. point ;//碰撞点            target .y = transform .position . y;            transform .LookAt ( target );//让主角面向那个方向        }

子弹发射:

     private LineRenderer bubbleLineRenderer;//声明LineRenderer     bubbleLineRenderer=gameObject.GetComponent<LineRenderer>();//获取物体的LineRenderer组件     bubbleLineRenderer.enabled=true;//激活组件     Ray bubbleRay=new Ray(transform.position,transform.forward);     RaycastHit hitInfo;     if(Physic.Raycast(bubbleRay,out hitInfo)){          bubbleLineRenderer.SetPosition(1,hitInfo.Point);//设置LineRenderer的位置     }else          bubbleRenderer.SetPosition(1,transform.position+transform.forward*50);

其实在开发这个游戏的过程中才发现自己有很多东西都没有搞懂,很多的知识只有在实际开发中才会明白。对Unity还有很多要学

0 0