当前位置:   article > 正文

【在Unity中创建生存游戏 】1~3_unity 3d生存游戏ui制作

unity 3d生存游戏ui制作

Day 1


操作


创建Terrain作为基础地形

创建一个空对象,命名为Player

Player对象

  • 创建一个Cylinder作为玩家人物,移除原有碰撞体,使用Character Controller(该组件加在Player上)

  • 将主视角摄像机移动到Player下,做第一视角游戏

  • 添加PlayerMovement与Mouse Movement(其中PlayerMovement存在bug,在开始游戏的时候如果大幅度移动鼠标会导致人物亲吻地面)

  • 创建空对象GroundCheck并至于玩家脚底,保证人物拥有落地检测(人类暂时不应该二连跳

注意:记得给地面Terrain放置到Ground层,并将落地检测的层也设置为Ground

代码

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class PlayerMovement : MonoBehaviour
  5. {
  6. public CharacterController controller;
  7. public float speed = 12f;
  8. public float gravity = -9.81f * 2;
  9. public float jumpHeight = 3f;
  10. public Transform groundCheck;//落地检测
  11. public float groundDistance = 0.4f;//落地检测距离
  12. public LayerMask groundMask;//声明打算用于落地检测的层
  13. Vector3 velocity;
  14. bool isGrounded;
  15. // Update is called once per frame
  16. void Update()
  17. {
  18. //checking if we hit the ground to reset our falling velocity, otherwise we will fall faster the next time
  19. isGrounded = Physics.CheckSphere(groundCheck.position, groundDistance, groundMask);
  20. if (isGrounded && velocity.y < 0)
  21. {
  22. velocity.y = -2f;
  23. }
  24. float x = Input.GetAxis("Horizontal");
  25. float z = Input.GetAxis("Vertical");
  26. //right is the red Axis, foward is the blue axis
  27. Vector3 move = transform.right * x + transform.forward * z;
  28. controller.Move(move * speed * Time.deltaTime);
  29. //如果在地面上,就可以跳(不许连跳)(以后多加个能力参数来解锁连跳吧)
  30. if (Input.GetButtonDown("Jump") && isGrounded)
  31. {
  32. //the equation for jumping
  33. velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity);
  34. }
  35. velocity.y += gravity * Time.deltaTime;
  36. controller.Move(velocity * Time.deltaTime);
  37. }
  38. }

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class MouseMovement : MonoBehaviour
  5. {
  6. public float mouseSensitivity = 100f;
  7. float xRotation = 0f;
  8. float YRotation = 0f;
  9. void Start()
  10. {
  11. //将鼠标光标固定在屏幕中央(不可视)
  12. Cursor.lockState = CursorLockMode.Locked;
  13. }
  14. void Update()
  15. {
  16. float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
  17. float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;
  18. //控制以x轴为轴心的旋转(抬头/低头)
  19. xRotation -= mouseY;
  20. //保证抬头/低头幅度不超过90°
  21. xRotation = Mathf.Clamp(xRotation, -90f, 90f);
  22. //控制以y轴为轴心的旋转(左右看)
  23. YRotation += mouseX;
  24. //applying both rotations
  25. transform.localRotation = Quaternion.Euler(xRotation, YRotation, 0f);//不太懂,先用着
  26. }
  27. }

Day 2


操作


添加资产

Terrain Sample Asset Pack | 3D 风景 | Unity Asset Store

Fantasy landscape | 3D 环境 | Unity Asset Store

Fantasy Skybox FREE | 2D 天空 | Unity Asset Store

在Terrain的基础上创建地形

  • Terrain中选择第二个工具(画笔),并调整为Paint Textrue

  • 在Add Layer中选择TerrainGrass作为地面纹理(现在地面上应该全是草艹)

  • 增加更多纹理:再次Add Layer添加新的纹理,选择添加的层(如图),然后开始在Scene中乱画吧

  • 绘制山川吧,将画笔调整如下

  • 接下来创建草网格,使用到第四个工具,并如下操作

注意请一定把Use GPU instancing关了,并且把Render Mode改为Grass,否则会看到胡成一坨的,缺少动画的草

  • 类似的,用第三个工具创造树

必须说明的是:用这种方式创造的山脉,植物或是树木都会被是为是地形Terrain的一部分,无法对他们添加脚本组件,这意味着玩家无法去破坏他们或进行任何类似的操作(无法撸树还想玩生存游戏??),所以我们应当直接将想要互动的物体作为对象拖入到Hierarchy

  • 最后使用天空盒

选择一个喜欢的天空!

Day 3(1)


操作


目标:

1)屏幕中央添加光标指示器

2)与物体进行互动(显示名字)

3)创造简单的兔子AI

  • 在Hierarchy中创建画布Canvas

1)接着创建Image,添加准星图片 (一定保证准心在图片的正中央)

2)然后创建Test,进行如下设置(注意左上角,我们禁用了这个对象)

  • 创建空对象,命名为SelectionManager(选择器),添加脚本SelectionManager(用于控制玩家选择可交互对象)

  • 为可交互对象添加InteractableObject组件,保证选择器能正确识别可交互对象

  • 创建空对象,命名为WhiteRabbits,用来实现可移动的兔子,在其动画管理器中进行相应设置(与脚本传出的动画参数保持一致)

我浅画了一个准心

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