Unity使用Sprite实现2D人物移动

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_39485740/article/details/102755196

前言

前几天从书上学习到了GUI的方式实现2D人物的动画播放和移动,可能是由于书太旧了,书中并没有提到用Sprite来实现这个功能,这次周末就对Sprite进行小小的摸索,并写下了这个Demo。

1、 创建工程

创建一个Unity2D工程,在Project视图下新建两个Folder,一个是用来存放图片的资源文件夹Resources,另一个是用来存放脚本文件的Script文件夹。

在这里插入图片描述

2、加载图片资源

1、导入图片资源
在Resources目录下道路图片资源(在Resources目录下鼠标右键选择Import new Asset,然后选择要导入的图片即可)。我导入的资源是从网上下载下来的。
在这里插入图片描述
2、切割图片
选中图片,然后在Inspector视图中修改Sprite Model为multiple,然后选择Sprite Editor来切割图片。
在这里插入图片描述
在Sprite Editor界面中选择slice,然后在type当中选择grid,最后修改pixel size即可点击Slice来切割。
在这里插入图片描述
切割完成后点击apply应用,这时我们的图片就会被切割好了。可以在Project视图中观察到图片被切割完成
在这里插入图片描述

3、代码实现

3.1 新建脚本文件

在script中新建脚本hero_script.cs文件

3.2 加载图片资源

使用ArrayList来存放,4个不同方向的移动的Sprite。具体代码为:

using UnityEngine;
using System.Collections;

public class hero_script : MonoBehaviour {

	//存放Sprite的anim
	ArrayList anim = new ArrayList();
	//用于存放加载的资源
	Sprite[] s;
	int rows = 4;
	int cols = 3;

	//存放获取SpriteRender组件,Sprite将被赋值在该组件的Sprite属性上
	SpriteRenderer spRenderer;

	// Use this for initialization
	void Start () {

		//加载资源
		s = Resources.LoadAll<Sprite> ("hero");

		//将图片资源按组存放到anim中
		for (int i=0; i<rows; i++) {
			ArrayList list = new ArrayList();
			for (int j=0; j<cols; j++) {
				list.Add(s[i*cols+j]);
			}
			anim.Add(list);
		}

		//获取spriteRenderer组件
		spRenderer = GetComponent<SpriteRenderer> ();

		//开始的时候让他加载s[0]图片
		spRenderer.sprite = s[0];
	}
	
	// Update is called once per frame
	void Update () {
		
	}
}

这时候运行,sprite就会加载hero_0图片了,不过在运行前我们要先将脚本绑定Sprite。下面是运行的效果图:
在这里插入图片描述

3.3 获取键盘的输入

修改Update()函数,使用Input.GetKey来获取键盘的输入,具体代码为:

void Update () {
	if (Input.GetKey (KeyCode.DownArrow)) {
		//按住向下箭头按键

	} else if (Input.GetKey (KeyCode.LeftArrow)) {
		//按住向左箭头按键

	} else if (Input.GetKey (KeyCode.RightArrow)) {
		//按住向右箭头按键

	} else if (Input.GetKey (KeyCode.UpArrow)) {
		//按住向上箭头按键

	}
}
3.4 加载动画

我这里选择按照书上的加载GUI动画的方式来加载动画。具体代码如下以向下移动为例:

if (Input.GetKey (KeyCode.DownArrow)) {
	//按住向下箭头按键

	//将其他三个位置初始化为0
	leftFrame = 0;
	upFrame = 0;
	rightFrame = 0;

	//加载向下的图片资源
	ArrayList moveDown = (ArrayList)anim[0];
	spRenderer.sprite = (Sprite)moveDown[downFrame];

	//制作成动画
	time += Time.deltaTime;
	if(time >= 1.0/fps){
		downFrame++;
		time = 0;
		if(downFrame >= moveDown.Count){
			downFrame = 0;
		}
	}
} 

这部分代码实现了就可实现2D人物动画的播放了
在这里插入图片描述

3.5人物移动

通过调用transform的Translate函数来实现sprite移动,注意Vector2只有向上和向右方向,如果要使用向下和向左方向可以使用-Vector2.down和-Vector2.right来实现,这里以向下为例子修改之前的代码。

if (Input.GetKey (KeyCode.DownArrow)) {
	//按住向下箭头按键

	//将其他三个位置初始化为0
	leftFrame = 0;
	upFrame = 0;
	rightFrame = 0;

	//加载向下的图片资源
	ArrayList moveDown = (ArrayList)anim[0];
	spRenderer.sprite = (Sprite)moveDown[downFrame];
	
	//人物向下移动
	transform.Translate(-Vector2.up*Time.deltaTime);

	//制作成动画
	time += Time.deltaTime;
	if(time >= 1.0/fps){
		downFrame++;
		time = 0;
		if(downFrame >= moveDown.Count){
			downFrame = 0;
		}
	}

} 

这部分代码实现了就可以实现人物的移动了
在这里插入图片描述

总结

由于接触Unity时间不长,加上书比较旧,这次的代码是修改Texture2D的代码,以后如果发现更好用的方法会及时的更新。

猜你喜欢

转载自blog.csdn.net/qq_39485740/article/details/102755196
今日推荐