Unity2D入门(四):角色移动

前段时间忙着各种考试加课设,实在是分身乏术,所以Unity的学习被搁置了,现在恢复更新,在开始前想说几句废话,希望我通过写博客的方式记录下我的学习过程,给我坚持下去的动力,这是我的初衷,在完成了这个系列的学习后,我还会回过头来讲学习到的内容模块化再次总结。扯了这么多,抓紧开始学习吧。

本节开始设计代码层面的内容

  1. 角色移动的原理
    打开在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函数每帧运行一次,角色移动需要接收键盘输入,若在某一帧获得了键盘输入,那么函数根据获得的输入更新角色的位置,从而实现了觉得移动。

  2. 实现角色移动
    实现角色移动的方式有很多,比如用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);  //更新角色位置
		}	

保存之后便可以实现最基本的移动了,从一开始就搞清楚每一行代码代表什么真的很有利于以后的学习。

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 您好,我可以回答这个问题。Unity2D角色移动可以通过编写脚本来实现。您可以使用Input.GetAxis函数获取水平和垂直输入,然后使用Transform.Translate函数将角色移动到新的位置。您还可以使用Rigidbody2D组件来实现更流畅的移动。希望这可以帮助您。 ### 回答2: Unity中2D角色移动可以通过以下几种方式实现: 1. 使用刚体组件(Rigidbody2D):将刚体组件添加到角色对象中,然后通过代码控制刚体的速度(rigidbody2D.velocity)或者力(rigidbody2D.AddForce)进行角色移动。可以通过键盘输入或者触摸输入来控制角色移动方向。 2. 使用Transform组件:直接通过修改角色对象的Transform组件中的position属性,来改变角色的位置。可以使用键盘输入或者触摸输入来控制角色移动方向。 3. 使用Translate方法:在更新角色移动的函数中,使用Translate方法来改变角色的位置,可以通过键盘输入或者触摸输入来控制角色移动方向。 4. 使用CharacterController组件:将CharacterController组件添加到角色对象中,然后通过代码控制CharacterController的Move函数来改变角色的位置。可以通过键盘输入或者触摸输入来控制角色移动方向。 需要注意的是,以上方法都需要在Update函数中进行角色移动的操作,并且要根据游戏需求进行相应的优化,例如添加碰撞检测、地图边界限制等。另外,角色移动过程中还可以结合动画、音效等来提高游戏的表现力和用户体验。 ### 回答3: 在Unity 2D中,角色移动可以通过几种不同的方法来实现。其中最常用的方法是使用Rigidbody2D组件来控制角色移动。 首先,需要在角色对象上添加Rigidbody2D组件。然后,可以通过编写脚本来控制角色移动。以下是一个简单的示例脚本: ``` using UnityEngine; public class PlayerMovement : MonoBehaviour { public float moveSpeed = 5f; // 角色移动速度 private Rigidbody2D rb; private void Start() { rb = GetComponent<Rigidbody2D>(); } private void Update() { float moveHorizontal = Input.GetAxis("Horizontal"); // 获取水平方向的输入 float moveVertical = Input.GetAxis("Vertical"); // 获取垂直方向的输入 Vector2 movement = new Vector2(moveHorizontal, moveVertical); // 构建角色移动的向量 rb.velocity = movement * moveSpeed; // 设置角色的速度 } } ``` 在这个示例中,我们首先获取用户的水平和垂直输入,并将其构建为一个向量。然后,通过将该向量与移动速度相乘,我们得到了角色的速度。最后,我们使用Rigidbody2D组件的velocity属性来设置角色的速度。 通过调整moveSpeed变量的值,可以改变角色移动速度。你也可以根据自己的需求来修改脚本,以满足不同的移动需求,如斜向移动、限制移动范围等。 以上就是使用Rigidbody2D组件来实现Unity 2D角色移动的简单示例。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值