赞
踩
前段时间忙着各种考试加课设,实在是分身乏术,所以Unity的学习被搁置了,现在恢复更新,在开始前想说几句废话,希望我通过写博客的方式记录下我的学习过程,给我坚持下去的动力,这是我的初衷,在完成了这个系列的学习后,我还会回过头来讲学习到的内容模块化再次总结。扯了这么多,抓紧开始学习吧。
本节开始设计代码层面的内容
角色移动的原理
打开在Unity中新建的脚本后,发现里面默认有两个函数:
using UnityEngine;
using System.Collections;
public class MainPlayer : MonoBehaviour {
// 使用此函数进行初始化
void Start () {
}
// 每帧调用一次 Update
void Update () {
}
}
为了连接到 Unity 的内部架构,脚本将实现一个类,此类从称为 MonoBehaviour 的内置类派生而来。可以将类视为一种蓝图,用于创建可附加到游戏对象的新组件类型。每次将脚本组件附加到游戏对象时,都会创建该蓝图定义的对象的新实例。类的名称取自创建文件时提供的名称。类名和文件名必须相同才能使脚本组件附加到游戏对象。
然而,必须注意在类中定义的两个函数。Update 函数是放置代码的地方,用于处理游戏对象的帧更新。这可能包括移动、触发动作和响应用户输入,基本上涉及游戏运行过程中随时间推移而需要处理的任何事项。为了使 Update 函数正常运行,在进行任何游戏操作之前,通常需要确保能够设置变量、读取偏好设置以及与其他游戏对象建立连接。在游戏开始之前(即第一次调用 Update 函数之前),Unity 将调用 Start 函数;此函数是进行所有初始化的理想位置。
有经验的程序员可能会惊讶于没有使用构造函数来完成对象的初始化。这是因为对象的构造由编辑器处理,不会像您可能期望的那样在游戏运行过程开始时进行。如果尝试为脚本组件定义构造函数,将会干扰 Unity 的正常运行,并可能导致项目出现重大问题。
以上来自Unity官方中文文 档:https://docs.unity.cn/cn/current/Manual/CreatingAndUsingScripts.html
以下是我的个人理解:
Update函数每帧运行一次,角色移动需要接收键盘输入,若在某一帧获得了键盘输入,那么函数根据获得的输入更新角色的位置,从而实现了觉得移动。
实现角色移动
实现角色移动的方式有很多,比如用If函数判断是否输入了某个按键,不过我还是按照Up主的方法来写了,毕竟我太菜了。
Up的方法是通过Input.GetAxisRaw函数来获得一个名为Horizontal的变量,Horizontal的作用是:对应键盘上的左右箭头,按下左箭或者右箭时会触发。
围绕此知识点的内容可参照这位博主的文章:https://blog.csdn.net/weixin_42116703/article/details/87385387
现在我们开始定义一个函数来实现移动的效果,第一步我们需要先把脚本和角色联系起来,即控制游戏对象
Rigidbody的介绍:通过物理模拟控制对象的位置。
向对象添加 Rigidbody 组件后,其运动将受到 Unity 物理引擎的控 制。即使不添加任何代码,Rigidbody 对象也受到向下的重力,并在与其他对象碰撞时作出反应(如果也存在适当的 Collider 组件)。
Rigidbody 还有一个脚本 API,让您能够向对象施加力,并以逼真的物理效果对其进行控制。例如,可以根据车轮施加的力来指定汽车的行为。根据这些信息,物理引擎可以处理汽车运动的大多数其他方面,因此汽车可进行逼真的加速并适当地响应碰撞。
在脚本中,建议使用 FixedUpdate 函数来施加力和更改 Rigidbody 设置(而不是使用 Update,Update 用于大多数其他帧更新任务)。这样做的原因是物理更新在测量的时间步骤中执行,而时间步骤与帧更新不一致。FixedUpdate 在每次进行物理更新前调用,因此在该函数中做出的任何更改都将直接处理。
以上来自官方文档:https://docs.unity.cn/cn/current/ScriptReference/Rigidbody.html
以下是实现角色移动的基本流程:
1、我们需要先创建Rigidbody2D变量rb来获取角色的组件Rigidbody2D,同样我们需要一个Animator变量anim来获取抉择的组件Animator。
2、定义变量speed,并给他初值。
3、用GetAxisRaw函数返回的是-1和1两个值,GetAxis返回的是-1到1之间的数,我们目前用GetAxis函数获取角色移动的方向。
4、我们用Rigidbody2D中的velocity属性来设置刚体的速度值,目前角色只在x方向水平移动。
实现代码:
public float speed; //设置角色的速度
public Rigidbody2D rb; \\获取角色的rigidbody组件
void Start(){
rb=GetComponent<Rigidbody2D>(); \\获取角色刚体
}
void Update(){
float horizontalmove = Input.GetAxis(“Horizontal”); //获取键盘输入
if(horizontalmove!=0){
rb.velocity=new Vector2(horizontalmove*speed*Time.deltaTime,rb.velocity.y); //更新角色位置
}
保存之后便可以实现最基本的移动了,从一开始就搞清楚每一行代码代表什么真的很有利于以后的学习。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。