unity3d学习(二)制作第一人称射击-玩家射击和添加敌人
2017-02-26 23:31
393 查看
玩家射击和添加敌人
写在前面:- 学习课本:Unity5实战 使用c#和unity开发多平台游戏-作者:Joseph Hocking
- 内容:第三章
-接上篇:unity3d学习(一)制作第一人称射击-玩家的视口和移动
让玩家能够射击
第一步:通过射线发射因为我们是第一人称射击,我们可以使用unity提供的ScreenPointToRay(),创建一个从摄影机开始发射的射线。一旦有了射线,它能被传入Physics.Raycast()方法中。
向摄影机添加RayShooter脚本
using UnityEngine; using System.Collections; public class RayShooter: MonoBehaviour { void Start() { _camera = GetComponent<Camera>();//获取相机上的Camera组件 } void Update() { if(Input.GetMouseButtonDown(0))//当点击左建执行发射射线 { Vector3 point = new Vector3(_camera.pixelWidth/2,_camera.pixelHeight/2,0);//发射位置 Ray ray = _camera.ScreenPointToRay(point);//创建射线 RayCastHit hit;//数据结构变量 if(Physics.Raycast(ray,out hit))//在此方法中寻找射线信息,并且赋值给hit变量 { //获取射线与射击到物体的交叉位置,并且进行一些操作 //Debug.Log("Hit "+hit.point); StartCoroutine(SphereIndicator(hit.point));//运行此协程 } } } private IEnumerator SphereIndicator(Vector3 pos)//运行协程来响应击中 { GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);//创建一个球体。 sphere.transform.position = pos;//表示击中此位置 yield return WaitForSeconds(1);//表示等待一秒再执行此函数下面的内容 Destory(sphere); } // 添加可视化指示器 void OnGUI()//unity会自动响应OnGUI方法。每帧之后执行 { int size = 12;//这是准星图像的长度,减去它确保准星对准中心点 float posX = _camera.pixelWidth/2-size/4; float posY = _camera.pixelHeight/2-size/2; } }
制作一个敌人
第一步:制作一个长方体作为敌人(下图左边):并为其添加一个ReactiveTarget脚本,代码如下:
using UnityEngine; using System.Collections; public class ReactiveTarget: MonoBehaviour { public void ReactToHit()//单敌人被攻击执行的操作 { StartCoroutine(Die()); } private IEnumerator Die() { this.transform.Rotate(-78,0,0);//做一些死亡的动作 yield return WaitForSeconds(1.5f);//等待几秒再执行消失 Destory(this.gameObject); } }
第二步:修改上面RayShooter脚本的部分代码
RayShooter脚本现在击中目标后,我们只是让它产生了一个球体,如果我们击中敌人,我们需要敌人死亡。代码修改如下
... if(Physics.Raycast(ray,out hit))//在此方法中寻找射线信息,并且赋值给hit变量 { GameObject hitObject = hit.transform.gameObject;//获取射线交叉的对象 //获取射线与射击到物体的交叉位置,并且进行一些操作 ReactiveTarget target = hitObject.GetComponent<ReactiveTarget>();//试着获取此对象ReactiveTarget脚本组件 if(target!=null)//如果有此组件的,说明是敌人。 { target.ReactToHit(); } else { StartCoroutine(SphereIndicator(hit.point));//运行此协程 } } ...
总结
1、Camera.pixelWidth、Camera.pixelWidth.pixelHeight、Camera.ScreenPointToRay()。分别是摄影机的宽和高。最后一个是从摄影机发射射线2、Physics.Raycast():记录所有射线的信息,并可以把射线信息给一个RaycastHit结构的变量
3、StartCoroutine():启动一个协程。它保持运行直到函数结束,可以在运行中暂停。参数是一个函数。
4、yield关键字:这个关键字导致协程临时暂停,在下一帧继续运行。
5、IEnumerator类型:StartCoroutine需使用。
6、OnGUI():和Start(),Update()类似。MonoBehaviour自动响应OnGUI方法。并且绘制的东西出现在3D场景最上层。
注意:很多类和方法不清楚请查看官方文档。
相关文章推荐
- Unity3D学习之(血条的制作以及声音的添加)
- Unity3D--学习太空射击游戏制作(四)
- Unity官方第一人称射击游戏<恶魔射手>_学习笔记三(敌人脚本)
- Unity3D--学习太空射击游戏制作(二)
- Unity3D--学习太空射击游戏制作(三)
- unity3d学习(三)制作敌人简单AI和发射火球
- Unity3D--学习太空射击游戏制作(一)
- unity3d 射击游戏(二)--添加敌人
- Unity3D学习之添加风
- PHP学习 新闻系统 js编辑框的制作 添加新闻操作
- 学习Unity3D第二天之制作耀斑、碰撞、风力区域、材质与预设体、创建公路、光源、声频实现与创建树木。
- unity3D 第一人称射击游戏
- Unity3D第一人称射击游戏向flash的转换
- Unity3D基础学习 NGUI Example 7-Scroll View(Panel)制作固定包裹栏,点击传递参数显示物体
- Unity3D 太空射击游戏学习笔记
- Unity3D学习之添加音乐
- Unity3D学习之添加耀斑,添加天空,添加画中画。
- Unity3D学习之使用摄像机制作实时显示小地图
- Unity3D学习之第二次课(碰撞体、树的制作等等...)
- Unity3D基础学习 NGUI自带Tooltip制作提示文字