赞
踩
创建Terrain作为基础地形
创建一个空对象,命名为Player
对Player对象
创建一个Cylinder作为玩家人物,移除原有碰撞体,使用Character Controller(该组件加在Player上)
将主视角摄像机移动到Player下,做第一视角游戏
添加PlayerMovement与Mouse Movement(其中PlayerMovement存在bug,在开始游戏的时候如果大幅度移动鼠标会导致人物亲吻地面)
创建空对象GroundCheck并至于玩家脚底,保证人物拥有落地检测(人类暂时不应该二连跳)
注意:记得给地面Terrain放置到Ground层,并将落地检测的层也设置为Ground
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
-
- public class PlayerMovement : MonoBehaviour
- {
- public CharacterController controller;
-
- public float speed = 12f;
- public float gravity = -9.81f * 2;
- public float jumpHeight = 3f;
-
- public Transform groundCheck;//落地检测
- public float groundDistance = 0.4f;//落地检测距离
- public LayerMask groundMask;//声明打算用于落地检测的层
-
- Vector3 velocity;
-
- bool isGrounded;
-
- // Update is called once per frame
- void Update()
- {
- //checking if we hit the ground to reset our falling velocity, otherwise we will fall faster the next time
- isGrounded = Physics.CheckSphere(groundCheck.position, groundDistance, groundMask);
-
- if (isGrounded && velocity.y < 0)
- {
- velocity.y = -2f;
- }
-
- float x = Input.GetAxis("Horizontal");
- float z = Input.GetAxis("Vertical");
-
- //right is the red Axis, foward is the blue axis
- Vector3 move = transform.right * x + transform.forward * z;
-
- controller.Move(move * speed * Time.deltaTime);
-
- //如果在地面上,就可以跳(不许连跳)(以后多加个能力参数来解锁连跳吧)
- if (Input.GetButtonDown("Jump") && isGrounded)
- {
- //the equation for jumping
- velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity);
- }
-
- velocity.y += gravity * Time.deltaTime;
-
- controller.Move(velocity * Time.deltaTime);
- }
- }
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
-
- public class MouseMovement : MonoBehaviour
- {
-
- public float mouseSensitivity = 100f;
-
- float xRotation = 0f;
- float YRotation = 0f;
-
- void Start()
- {
- //将鼠标光标固定在屏幕中央(不可视)
- Cursor.lockState = CursorLockMode.Locked;
- }
-
-
- void Update()
- {
- float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
- float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;
-
- //控制以x轴为轴心的旋转(抬头/低头)
- xRotation -= mouseY;
-
- //保证抬头/低头幅度不超过90°
- xRotation = Mathf.Clamp(xRotation, -90f, 90f);
-
- //控制以y轴为轴心的旋转(左右看)
- YRotation += mouseX;
-
- //applying both rotations
- transform.localRotation = Quaternion.Euler(xRotation, YRotation, 0f);//不太懂,先用着
-
- }
- }
添加资产
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中
最后使用天空盒
选择一个喜欢的天空!
目标:
1)屏幕中央添加光标指示器
2)与物体进行互动(显示名字)
3)创造简单的兔子AI
在Hierarchy中创建画布Canvas
1)接着创建Image,添加准星图片 (一定保证准心在图片的正中央)
2)然后创建Test,进行如下设置(注意左上角,我们禁用了这个对象)
创建空对象,命名为SelectionManager(选择器),添加脚本SelectionManager(用于控制玩家选择可交互对象)
为可交互对象添加InteractableObject组件,保证选择器能正确识别可交互对象
创建空对象,命名为WhiteRabbits,用来实现可移动的兔子,在其动画管理器中进行相应设置(与脚本传出的动画参数保持一致)
我浅画了一个准心
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。