Unity2D入门(一) 玩家移动

Unity2D入门(一) 玩家移动

所需知识

  • C# 语言基础
  • Unity 引擎操作基础

实现目标

  • 一个通用的玩家移动脚本

版本 1.0

目标:实现基础的移动功能。

public class Move : MonoBehaviour
{
	void Start()
	{
		// 初始化
	}
	
	void Update()
	{
		// 获取玩家输入
	}
	
	void FixedUpdate()
	{
		// 对玩家施加力
	}
}

玩家移动大致的框架如上。

Start()函数:Unity提供的函数,在所有更新方法之前调用,在生命周期中只调用一次。常用于初始化。

Update()函数:Unity提供的函数,每一帧都会调用,每一秒的帧数于电脑性能有关。

FixedUpdate()函数:Unity提供的函数,每一帧都会调用,但是每秒固定60帧。常用于物理操作。

public class Move : MonoBehaviour
{
	private Rigidbody2D rigidbody2D;
	
	// 玩家的输入信息
	private float moveHorizontal;	
	private float moveVertical;
	private Vector2 movement;
	
	void Start()
	{
		// 初始化
		rigidbody2D = getComponent();
	}
	
	void Update()
	{
		// 获取玩家输入
		moveHorizontal = Input.GetAxis("Horizontal");
 	   	moveVertical = Input.GetAxis("Vertical");
 	   	
 	   	movement = new Vector2(moveHorizontal , moveVertical);
	}
	
	void FixedUpdate()
	{
		// 对玩家施加力
	}
}

上面的代码实现了获取玩家的输入。

Rigidbody2D:Unity组件,有关物理的操作都需要这个组件。

getComponent<>():获取绑定了此脚本的对象的组件。后面的泛型表示获取的组件类型,此脚本的代码表示获取此对象的Rigidbody2D组件。

Input.GetAxis():此函数表示获取玩家的轴输入,返回值的范围:[-1 , 1]。

  • Input.GetAxis("Horizontal"):表示获取左右方向键的输入,左方向键返回值小于0,右方向键返回值大于0。
  • Input.GetAxis("Vertical"):表示获取上下方向键的输入,下方向键返回值小于0,上方向键返回值大于0。

Vector2:二维向量对象。代码中用于表示对玩家施加力的方向。

public class Move : MonoBehaviour
{
	private Rigidbody2D rigidbody2D;
	
	// 玩家的输入信息
	private float moveHorizontal;	
	private float moveVertical;
	private Vector2 movement;
	
	// 移动速度
	public float speed;
	
	void Start()
	{
		// ...初始化省略
	}
	
	void Update()
	{
		// ...获取玩家输入省略
	}
	
	void FixedUpdate()
	{
		// 对玩家施加力
		rigidbody2D.AddForce(movement * speed * 10.0f);
	}
}

上面代码实现了向玩家施加力。

AddForce():向对象施加力,参数为一个二维向量。此脚本的代码speed * 10.0f作为力的大小。

将变量声明为 public 后,可以直接在 Unity 编辑器里调整变量的值。

此时将脚本绑定到对象后,就可以通过方向键控制对象移动。

版本 2.0

目标:增加移动模式(全方向,垂直方向,水平方向)。

public class Move : MonoBehaviour
{
	private Rigidbody2D rigidbody2D;
	
	// 玩家的输入信息
	private float moveHorizontal;	
	private float moveVertical;
	private Vector2 movement;
	
	// 移动速度
	public float speed;
	public Enums.movementType movementType;
	
	void Start()
	{
		// 初始化
		rigidbody2D = getComponent();
		movementType = Enums.movementType.AllDirections;
		
	}
	
	void Update()
	{
		// ...获取玩家输入省略
	}
	
	void FixedUpdate()
	{
		// ...对玩家施加力省略
	}
}


public class Enums
{
    public enum movementType
    {
        AllDirections,
		OnlyHorizontal,
		OnlyVertical
    }
}

上面的代码移动类型使用了枚举实现。默认初始化时AllDirections

public class Move : MonoBehaviour
{
	private Rigidbody2D rigidbody2D;
	
	// 玩家的输入信息
	private float moveHorizontal;	
	private float moveVertical;
	private Vector2 movement;
	
	// 移动速度
	public float speed;
	public Enums.movementType movementType;
	
	void Start()
	{
		// ...初始化省略
		
	}
	
	void Update()
	{
		// 获取玩家输入
		moveHorizontal = Input.GetAxis("Horizontal");
 	   	moveVertical = Input.GetAxis("Vertical");
 	   	
 	   	// 移动模式
		switch(movementType)
		{
			case Enums.movementType.OnlyHorizontal:
				moveVertical = 0.0f;
				break;
			case Enums.movementType.OnlyVertical;
			  	moveHorizontal = 0.0f;
				break;
		}
 	   	
 	   	movement = new Vector2(moveHorizontal , moveVertical);
	}
	
	void FixedUpdate()
	{
		// ...对玩家施加力省略
	}
}


public class Enums
{
	// ...省略
}

如果水平移动,则将二维向量的 y 轴的值设为0。

如果垂直移动,则将二维向量的 x 轴的值设为0。

收尾

[RequireComponent(typeof(Rigidbody2D))]
public class Move : MonoBehaviour
{
	// ...省略
}

[RequireComponent(typeof())]表示绑定此脚本时自动绑定参数中的组件。

因为此脚本需要Rigidbody2D组件,但是新建的游戏物体是没有Rigidbody2D组件的。所以为了避免遗漏Rigidbody2D组件,会为我们自动绑定Rigidbody2D组件。

关注我的微信公众号,查看更多文章,第一时间收到我的文章。

Unity2D入门(一) 玩家移动_第1张图片

你可能感兴趣的:(游戏开发,unity,Unity)