【学习笔记】恶梦射手Nightmares Shooter(一)

        前几天用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     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。。

转载于:https://www.cnblogs.com/dbao-8283/p/4137649.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值