当前位置:   article > 正文

第一人称射击游戏制作

第一人称射击游戏制作

1.创建角色和摄像机

Unity中创建一个3D角色模型和一个摄像机,将角色模型拖拽到场景中,并将其设置为Player对象,将摄像机拖拽到场景中,并将其设置为Head对象。

2.设置摄像机参数

在Head对象上添加一个CinemachineFreeLooK脚本,用于实现自由视角,在CinemachineFreeLook脚本中,可以设置摄像机的旋转速度、  平滑度等参数。

3.编写控制角色移动的代码

在Player 对象上添加一个Rigidbody组件和一个CharacterController组件,在CharacterController组件中,可以设置角色的移动速度、跳跃高度等参数,然后,编写以下代码来控制角色的移动:

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class jump : MonoBehaviour
  5. {
  6. // Start is called before the first frame update
  7. private Rigidbody rg;
  8. public bool isground = true;
  9. private AudioSource footvoice;
  10. void Start()
  11. {
  12. rg = GetComponent<Rigidbody>();
  13. footvoice = GetComponent<AudioSource>();
  14. }
  15. // Update is called once per frame
  16. void Update()
  17. {
  18. if (Input.GetKeyDown(KeyCode.Space) && isground)
  19. {
  20. rg.AddForce(Vector3.up * 200);
  21. }
  22. if ((Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.D)) && isground)
  23. {
  24. if (footvoice.isPlaying == false)
  25. {
  26. footvoice.Play();
  27. }
  28. }
  29. else
  30. {
  31. footvoice.Stop();
  32. }
  33. }
  34. private void OnCollisionEnter(Collision collision)
  35. {
  36. if (collision.collider.tag == "ground")
  37. {
  38. isground = true;
  39. }
  40. }
  41. private void OnCollisionExit(Collision collision)
  42. {
  43. if (collision.collider.tag == "ground")
  44. {
  45. isground = false;
  46. }
  47. }
  48. }

4.编写控制视角的代码

在Head对象上添加一个 CinemachineFreeLook脚本,并设置好摄像机的旋转速度、平滑度等参数,然后,编写以下代码来控制视角:

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class Move : MonoBehaviour
  5. {
  6. private Transform head;
  7. private Transform body;
  8. // Start is called before the first frame update
  9. void Start()
  10. {
  11. head = transform;
  12. body = transform.parent;
  13. Cursor.lockState = CursorLockMode.Locked;
  14. }
  15. // Update is called once per frame
  16. void Update()
  17. {
  18. float mousex = Input.GetAxis("Mouse X");
  19. if (mousex != 0)
  20. {
  21. body.Rotate(Vector3.up, mousex * 150 * Time.deltaTime);
  22. }
  23. float mousey = Input.GetAxis("Mouse Y");
  24. if (mousey != 0)
  25. {
  26. head.Rotate(Vector3.left, mousey * 150 * Time.deltaTime);
  27. }
  28. if (Vector3.Angle(body.forward, head.forward) > 60)
  29. {
  30. head.Rotate(Vector3.left, mousey * -100 * Time.deltaTime);
  31. }
  32. if (Input.GetKey(KeyCode.W))
  33. {
  34. body.Translate(Vector3.forward * 5.0f * Time.deltaTime);
  35. }
  36. if (Input.GetKey(KeyCode.S))
  37. {
  38. body.Translate(Vector3.back * 5.0f * Time.deltaTime);
  39. }
  40. if (Input.GetKey(KeyCode.A))
  41. {
  42. body.Translate(Vector3.left * 5.0f * Time.deltaTime);
  43. }
  44. if (Input.GetKey(KeyCode.D))
  45. {
  46. body.Translate(Vector3.right * 5.0f * Time.deltaTime);
  47. }
  48. }
  49. }

 5.测试游戏功能

运行游戏,按下鼠标左键时,摄像机会变为自由视角,可以通过鼠标左右移动和上下移动来控制视角,同时,按下W、A、S、D键时,角色会向前、向左、向后、向右移动。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/104065
推荐阅读
相关标签
  

闽ICP备14008679号