技术经验解读:【学习笔记】恶梦射手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。。

目录
打赏
0
0
0
0
32
分享
相关文章
技术成长之路:从新手到专家的心路历程
【8月更文挑战第9天】在技术的世界里,每个人都是从零开始。本文将通过个人经历,探讨如何在技术的海洋中不断学习和成长,最终成为领域内的专家。我们将一起回顾那些挑战与成就,以及它们如何塑造了一个技术人员的职业轨迹。
技术成长之旅:从新手到专家的蜕变之路
【8月更文挑战第8天】在技术的海洋中,每一位程序员都曾是一名初学者。本文将通过个人经历和行业观察,探讨如何从技术新手成长为领域专家的过程。我们将深入讨论持续学习、实践、反思、交流与创新的重要性,并分享一些实用的成长策略。无论你是刚刚起步的技术爱好者,还是正在追求更高成就的资深开发者,这篇文章都将为你提供宝贵的启示和指导。
|
9月前
经验大分享:OpenFOAM中的边界条件(一)
经验大分享:OpenFOAM中的边界条件(一)
283 0
经验大分享:serval
经验大分享:serval
43 0
|
9月前
经验大分享:sdfdsf
经验大分享:sdfdsf
43 0
经验大分享:Syline6.5学习心得
经验大分享:Syline6.5学习心得
44 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等