技术经验解读:【学习笔记】恶梦射手NightmaresShooter(一)

简介: 技术经验解读:【学习笔记】恶梦射手NightmaresShooter(一)

前几天用Unity做了一个恶魔射手的游戏,在这里总结一下,加深下印象吧.感觉忘性太大了.


在这里主要分析一下主要的功能:


1. 给主角添加动画,设置Animator 状态机, 这里就详细说了.


2. 控制主角移动 + 动画


1 //角色移动


2 float h = Input.GetAxis("Horizontal");


3 float v = Input.GetAxis("Vertical");


4 rigidbody.MovePosition(transform.position + new Vector3(h, 0, v) Speed Time.deltaTime);


5


6 //动画


7 if (h != 0 || v != 0)


8 {


9


10 //开启移动动画


11 anim.SetBool("Move", true);


12 }


13 else


14 {


15 //切换静止动画


16 anim.SetBool("Move", false);


17 }


在这里我遇到一个问题,我把主角collider深入地面了,导致角色怎么都不动.切记


3. 相机控制了, 用差值是比较好的


1 void FixedUpdate()


2 {


3 var targetPosition = player.position + new Vector3(0, 7, -7);


4 //平滑


5 transform.position = Vector3.Lerp(transform.position, targetPosition, soomthing Time.deltaTime);


6 }


4. 鼠标控制主角方向


1 //控制角色方向


2 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);


3 RaycastHit hitinfo;


4 if (Physics.Raycast(ray, out hitinfo, 200, GroundIndex))


5 {


6 var target = hitinfo.point;


7 target.y = transform.position.y;


8 transform.LookAt(target);


9 }


5. 受伤+ 被揍的时候变色


1 void Update()


2 {


3 _meshRenderer.material.color = Color.Lerp(_meshRenderer.material.color, Color.white, _smoothing Time.deltaTime);


4


5 if (Input.GetMouseButtonDown(0))


6 {


7 Damage(30);


8 }


9 }


10


11 //代码效果参考:http://www.lyjsj.net.cn/wx/art_22894.html

private void Damage(float hurt)

12 {


13 if (_life <= 0)


14 {


15 return;


16 }


17 this._life -= hurt;


18


19 _meshRenderer.material.color = Color.red;


20 if (_life <= 0)


21 {


22 anim.SetBool("Dead", true);


23 Dead();//死后工作


24 }


25


26 }


6. 主角要射击了


1 void Update()


2 {


3 //每秒发射几发子弹


4 _timer += Time.deltaTime;


5 if (_timer > 1 / _count)


6 {


7 _timer -= 1 / _count;


8


9 Shooter();


10 }


11 }


12


13 void Shooter()


14 {


15 light.enabled = true;


16 //开启粒子特效


17 _particleSystem.Play();


18 _lineRenderer.enabled = true;


19


20 //设置弹道起始位置


21 _lineRenderer.SetPosition(0, transform.position);


22


23 Ray ray = new Ray(transform.position, transform.forward);


24 RaycastHit hit;


25 //射线碰撞检测


26 if (Physics.Raycast(ray, out hit))


27 {


28 //终点位置


29 _lineRenderer.SetPosition(1, hit.point);


30 }


31 else


32 {


33 _lineRenderer.SetPosition(1, transform.position + transform.forward * 100);


34 }


35 //子弹音效


36 audio.Play();


37 //多少时间调用方法


38 Invoke("AfterShooter", 0.05f);


39 }


总结:关于主角整体的操作基本完成了, 觉得游戏就是把一个个小功能组合到一起,多多分析吧. hoho。。

相关文章
|
2天前
|
JSON 前端开发 数据格式
经验大分享:TheGeneofBitizens
经验大分享:TheGeneofBitizens
|
7天前
经验大分享:OpenFOAM中的边界条件(一)
经验大分享:OpenFOAM中的边界条件(一)
18 0
经验大分享:OpenFOAM中的边界条件(一)
|
5天前
|
JSON 网络协议 Linux
经验大分享:serval
经验大分享:serval
|
5天前
经验大分享:sdfdsf
经验大分享:sdfdsf
|
6天前
|
机器学习/深度学习
经验大分享:Sicily1153
经验大分享:Sicily1153
|
6天前
|
前端开发 JavaScript 容器
技术经验分享:CSSFIXEDpornjavhd
技术经验分享:CSSFIXEDpornjavhd
11 0
|
6天前
|
C++
技术经验分享:C++程序设计的技巧
技术经验分享:C++程序设计的技巧
|
小程序 程序员 Windows
学习经验
写写自己的学习经验
|
测试技术 Linux Go