建立一个2D项目
导入需要用的资源
这是我从视频里提供的资料下载的
分析资源,收纳整理
将玩家、地图资源拖入游戏场景中并修改为合适的大小
将动态效果选中,拖入游戏场景中,创建动画
将Explode1改名为ExplosionController
将新建动画改名为Explodsion
并新建两个文件夹来放置所有的动画
给游戏对象改名字
创建预制体
建立一个Perfabs文件夹来放置预制体,并在Perfabs文件夹中创建效果和地图两个文件夹来放置对应的预制体
操作游戏玩家
给游戏玩家加入刚体组件(rigidbody)和2D碰撞器组件(Box Collider 2D)
将刚体组件中的重力改为0 ,选中冻结Z轴,解决移动当中的旋转
建立Player脚本
在类中定义速度:public float moveSpeed = 3;
在private void FixedUpdate()方法中添加以下代码,将代码放在FiexedUpdate生命周期函数中,是为了解决抖动。
然后通过监测键盘中wasd键和上下左右键来达到让Player移动的效果
调用transform中的Translate方法让Player移动
float v = Input.GetAxis("Vertical");
transform.Translate(Vector3.up * v * moveSpeed * Time.fixedDeltaTime, Space.World);
//if (v < 0)
//{
// sr.sprite = tankSprite[2];
//}
//else if (v > 0)
//{
// sr.sprite = tankSprite[0];
//}
//if(v!=0)
//{
// return;
//}
float h = Input.GetAxis("Horizontal");
transform.Translate(Vector3.right * h * moveSpeed * Time.fixedDeltaTime, Space.World);
优化移动
按上面的步骤下来会发现坦克向不同方向移动时,都是朝向同一个方向的,需要在更改移动方向时,朝向一致的方向。
在类中定义渲染组件private SpriteRenderer sr;
并获取组件
void Start()
{
sr = GetComponent<SpriteRenderer>();
}
// Update is called once per frame
一个tankSprite数组,public Sprite[] tankSprite;
在下面的图片中找出坦克对应的不同方向
添加至tankSprite中
然后通过判断键盘输入的方向来控制坦克的朝向,并对移动的优先级进行处理,如果同时输入上下键和左右键,将优先控制上下的移动
private void FixedUpdate()
{
float v = Input.GetAxis("Vertical");
transform.Translate(Vector3.up * v * moveSpeed * Time.fixedDeltaTime, Space.World);
if (v < 0)
{
sr.sprite = tankSprite[2];
}
else if (v > 0)
{
sr.sprite = tankSprite[0];
}
if(v!=0)
{
return;
}
float h = Input.GetAxis("Horizontal");
transform.Translate(Vector3.right * h * moveSpeed * Time.fixedDeltaTime, Space.World);
if (h < 0)
{
sr.sprite = tankSprite[3];
}
else if (h > 0)
{
sr.sprite = tankSprite[1];
}
}