1.创建一个地面(plane)
点击unity导航栏上的GameObeject,选择3D Obejct,再选择plane就可以创建一个地面。
2.创建一个立方体(cube)用来代替玩家(player)
2.1 创建立方体
点击unity导航栏上的GameObeject,选择3D Obejct,再选择cube就可以创建一个立方体。
2.2 赋予立方体属性
赋予立方体刚体(rigidbody)属性,使得立方体具有重力、碰撞等一般物理特性。
点击Hierarchy中之前创建的cube,再点击inspector中的Add component 搜索 Rigidbody即可添加成功。
其默认有重力。
2.3 通过脚本使得立方体移动
unity中控制物体移动的原理为通过代码(脚本),改变物体的Transform属性
Position代表物体的三维位置,Rotation代表物体的旋转角度,Scale代表物体的缩放程度
2.3.1 创建脚本文件
在Assets中新建一个文件夹Scripts。(在Assets中点击鼠标右键,点击create,再点击folder)
在Scripts中点击鼠标右键,点击create,再点击C# Scripts
2.3.2 脚本文件实现
点击创建好的move文件。
using System.Collections; using System.Collections.Generic; using UnityEngine;
// 注意此处Move需要与你的脚本名称对应 public class Move : MonoBehaviour { // 控制物体的移动速度 public
float moveSpeed = 5f; Vector3 moveAmount; // 刚体属性 Rigidbody rb; // 在开始的一帧执行的函数
void Start() { // 获取当前物体的刚体属性 rb = GetComponent<Rigidbody>(); } // 刷新的每一帧执行的函数
void Update() { // 监听鼠标事件 Vector3 moveDir = new
Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")).normalized;
// 移动距离 = 移动方向 * 移动速度 * 每一帧时间 moveAmount = moveDir * moveSpeed *
Time.deltaTime; } private void FixedUpdate() { // 物体移动
rb.MovePosition(rb.position + moveAmount); } }
Horizontal 和 Vertical 的设置地点:Edit下的ProjectSetting
2.3.3 脚本文件的挂载
点击cube,再点击Add Component,搜素脚本名称Move即可。
2.4 物体的旋转与跳跃
脚本文件如下:
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class Move : MonoBehaviour { public float moveSpeed = 5f; // 控制旋转速度
public float rotateSpeed = 5f; // 控制跳跃高度 public float jumpSpeed = 8f; Vector3
moveAmount; Rigidbody rb; void Start() { rb = GetComponent<Rigidbody>(); } void
Update() { Vector3 moveDir = new Vector3(Input.GetAxis("Horizontal"), 0,
Input.GetAxis("Vertical")).normalized; moveAmount = moveDir * moveSpeed *
Time.deltaTime; // 获取旋转方向 Vector3 targetDir = Vector3.Slerp(transform.forward,
moveDir, rotateSpeed * Time.deltaTime); // 实现旋转 transform.rotation =
Quaternion.LookRotation(targetDir); // 实现按键跳跃 if (Input.GetButton("Jump")) {
transform.Translate(Vector3.up * Time.deltaTime * jumpSpeed); } } private void
FixedUpdate() { rb.MovePosition(rb.position + moveAmount); } }