其实了解并学习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还有很多要学