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