当前位置:   article > 正文

Unity2d游戏项目--小狐狸_unity经典案例小狐狸

unity经典案例小狐狸

一、素材处理

  1. 背景

(一)

在文件夹中找到back图片,并在检查器面板中将back图片的每单位像素数设置为16。

(文件所在地)

(面板设置)

(二)

将图片拖入到场景中

  1. 场景素材

(一)

生成矩形的瓦片地图

(二)

打开平铺调色板

(三)

新建并命名为map,在原目录新建一个文件夹,用于存放你在这个瓦片地图里所使用的像素。

(四)

选中tileset-sliced,并在检查器面板中将tileset-sliced图片的每单位像素数设置为16。

若没有切割好的tileset,选中tileset,并在检查器中将Sprite模式更改为多个并点击“Sprite Editor”,选择自定义切片,将数值更改为每单位像素数以方便你对每个像素的使用,最后点击“应用”确定。

(五)

将修改完成的tileset-sliced放到平铺调色板中

二、图层与角色建立

  1. 绘制场景

使用平铺调色板绘制来搭建场景

  1. 图层管理

在检查器中,选择排序图层添加标签“Background”“Fontground”.

越是下面的图层,在场景中的显示就越上。

处于同一层的显示,则按照图层顺序的大小,越大则越优先显示。这里我们把背景图“back”的排序图层设置为“Background”,图层顺序设置为“0”;绘制的场景“Tilemap”的排序图层设置为“Background”,图层顺序设置为“1”,有需要可再做修改。

3.人物建立

(一)

在空白处右键新建一个精灵,选择正方形即可。

(二)

在下列途径中找到player-idle

记得更改每单位像素值

(三)

将player-idle-1拖入到sprite的组件Sprite Renderer中的精灵,并修改排序图层为Frontground。然后将sprite重命名为Player,将位置重置,接下来就能在场景中看见小狐狸了。

(四)

接下来要赋予Player重力以及碰撞,所以我们要给Player添加"Rigidbody 2D"组件和“Box Collider 2D”组件,再给我们绘制的地图“Tilemap”添加碰撞组件“Tilemap Collider 2D”。尝试运行,发现小狐狸收到重力影响掉落在绘制的场景中。

三、角色移动

1.Player移动脚本

新建脚本,命名为PlayerController,代码如下,实现对象根据按键来进行左右移动。请在控制面板锁定Player的rigbody2d组件的z轴。

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class PlayController : MonoBehaviour
  5. {
  6. public Rigidbody2D rb; //获取对象刚体
  7. public float speed; //设置对象移动速度
  8. // Start is called before the first frame update
  9. void Start()
  10. {
  11. }
  12. // Update is called once per frame
  13. void Update()
  14. {
  15. Movement();
  16. }
  17. void Movement()//角色移动
  18. {
  19. float horizontalmove;
  20. horizontalmove = Input.GetAxis("Horizontal");
  21. if(horizontalmove != 0)
  22. {
  23. rb.velocity = new Vector2(horizontalmove * speed, rb.velocity.y);
  24. }
  25. }
  26. }

(一)添加跳跃功能和对象转向功能

  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. public class PlayController : MonoBehaviour
  5. {
  6. public Rigidbody2D rb; //获取对象刚体
  7. public float speed; //设置对象移动速度
  8. public float jumpforce;//设置跳跃获得的纵向力
  9. // Start is called before the first frame update
  10. void Start()
  11. {
  12. }
  13. // Update is called once per frame
  14. void FixedUpdate()
  15. {
  16. Movement();
  17. }
  18. void Movement()//角色移动
  19. {
  20. float horizontalmove = Input.GetAxis("Horizontal");
  21. float facedicetion = Input.GetAxisRaw("Horizontal");
  22. //如果orizontalmove为1则向左走,-1则向右走
  23. if (horizontalmove != 0)
  24. {
  25. rb.velocity = new Vector2(horizontalmove * speed * Time.deltaTime, rb.velocity.y);
  26. }
  27. //如果facedicetion为1则向左转,-1则向右转
  28. if (facedicetion != 0)
  29. {
  30. transform.localScale = new Vector3(facedicetion, 1, 1);
  31. }
  32. //如果按下跳跃键,对象获得纵向力
  33. if (Input.GetButtonDown("Jump"))
  34. {
  35. rb.velocity = new Vector2(rb.velocity.x,jumpforce * Time.deltaTime);
  36. }
  37. }
  38. }

四、角色动画

  1. 前置工作

给Player添加组件Animator

新建文件夹用于存放动画,并在对应文件夹新建动画控制器(Animator Contorller)。

把动画控制器“Player”拖到对象“Player”的Animator组件。

打开动画

2.站立动画和跑动动画

单击对象“Player”,然后点击动画创建,在如下图所示找到对应的图片,放到Animation中,调整合适即可。

3.站立动画与跑动动画的转换

打开如下窗口

在“run”与“idle”两个动画之间创立过度

添加一个新参数“running”

选中“idle”到“run”的过渡关系,进行如下调整:关闭退出时间,过渡持续时间为0,当移动速度大于0.1时,动画过度为“run”。同理设置“run”到“idle”的过渡关系。

编辑脚本PlayerController.cs,添加由按键判断动画的功能。

  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. public class PlayController : MonoBehaviour
  5. {
  6. public Rigidbody2D rb; //获取对象刚体
  7. public Animator anim; //获取对象动画组件
  8. public float speed; //设置对象移动速度
  9. public float jumpforce;//设置跳跃获得的纵向力
  10. // Start is called before the first frame update
  11. void Start()
  12. {
  13. }
  14. // Update is called once per frame
  15. void FixedUpdate()
  16. {
  17. Movement();
  18. }
  19. void Movement()//角色移动
  20. {
  21. float horizontalmove = Input.GetAxis("Horizontal");
  22. float facedicetion = Input.GetAxisRaw("Horizontal");
  23. //如果orizontalmove为1则向左走,-1则向右走
  24. if (horizontalmove != 0)
  25. {
  26. rb.velocity = new Vector2(horizontalmove * speed * Time.deltaTime, rb.velocity.y);
  27. anim.SetFloat("running", Mathf.Abs(horizontalmove)); //按左键时,horizontalmove为负数,动画由“run”转变为“idle”,故此处需要Mathf.Abs转变为绝对值
  28. }
  29. //如果facedicetion为1则向左转,-1则向右转
  30. if (facedicetion != 0)
  31. {
  32. transform.localScale = new Vector3(facedicetion, 1, 1);
  33. }
  34. //如果按下跳跃键,对象获得纵向力
  35. if (Input.GetButtonDown("Jump"))
  36. {
  37. rb.velocity = new Vector2(rb.velocity.x,jumpforce * Time.deltaTime);
  38. }
  39. }
  40. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/134862
推荐阅读
相关标签
  

闽ICP备14008679号