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