一、步骤

1.创建一个Canvas

2.对Canvas进行初始化,记得把Game视图的分辨率调成和Canvas里面设置的一样的分辨率960X640

3.创建一个Image的UI节点作为Canvas的子节点,名字叫bg,设置宽高为1920X1080,Image组件里面的Color设置为黑色。

4.设置背景image的Pivot(表示bg节点的原点位置)的X为0,Y为0.5

5.设置背景image的Pos X为-480,其他为0

6.创建一个Ground空节点在Canvas父节点下,里面放障碍物的image

7.在Ground文件夹下面创建名为g1,g2,g3,g4的image类型的UI节点,作为障碍节点,设置这些障碍节点的颜色不同

8..在Ground文件夹下面创建名为item的image类型的UI节点,作为主角节点,设置这个节点的Image组件的贴图,记得设置贴图的Texture Type为Sprite,拖进去后记得set native size

9.给主角添加Rigidbody 2D的刚体组件,设置Gravity Scale重力加速度为60

10.给主角添加Box Collider 2D的正方形形状组件,点击Edit Collider编辑形状区域

11.给Ground障碍物组节点添加Edge Collider 2D的边界形状组件,把左上角那个菊花图案选择为中心的那个图案

12.点击Ground节点的Edge Collider 2D组件的Edit Collider编辑形状区域,不同的是这个是两个绿色的点,要自己拉伸来包围整个障碍物,先从左拉到右边,然后从左边开始每次都拉一小段来慢慢包围,最后要包围屏幕边界,不然主角跳出屏幕

  地图编辑的时候,如果是水平的,还需要最后数值调整,要让某两个点的Y轴一样,不然会滑动。

13.创建一个地面材质,Create-Physics2D Material,设置摩擦力,弹性都位0,把编辑好的Material拖进ground节点的Material属性中。

14.接下来要用一个脚本来通过键盘控制主角移动

15.在写的过程中要获得和键位匹配的参数Horizontal

Edit--Project Settings--Input

public class player : MonoBehaviour {
Rigidbody2D body;
// Use this for initialization
void Start () {
     //获得刚体
this.body = this.GetComponent<Rigidbody2D>();
// 设置刚体不会有选转;两种方法
this.body.freezeRotation = true;
// this.body.constraints = RigidbodyConstraints2D.FreezeRotation;
} // 跳跃
void jump() {
this.body.AddForce(new Vector2(, ));
} void walk(int dir) {
     //获得刚体速度
Vector2 v = this.body.velocity;
if (dir < ) {
v.x = -;
this.transform.localScale= new Vector3(-, , );
}
else if (dir > ) {
v.x = ;
this.transform.localScale = new Vector3(, , );
}
this.body.velocity = v;
} // Update is called once per frame
void Update () {
if (Input.GetButtonDown("Jump")) {
this.jump();
}
// 左边走
else if (Input.GetAxisRaw("Horizontal") < ) {
this.walk(-);
}
// 右边走
else if (Input.GetAxisRaw("Horizontal") > ) {
this.walk();
}
}
}

16.设置摄像机跟着主角一起运动

a.设置Canvas节点的Canvas组件的Reander Mode为Screen Space Camera

b.把main Camera节点拖进Canvas节点的Canvas组件的Render Camera属性

c.一定要记得把main Camera节点放在Canvas节点下面,作为子节点,不然会出错,Canvas会和摄像机一起移动,这和Canvas与摄像机的实现机制有关系,由于Unity是不开源的,所以猜测。

public class player : MonoBehaviour {
Rigidbody2D body;
public Camera bind_camera = null;
private Vector3 offset = Vector3.zero;
// Use this for initialization
void Start () {
this.body = this.GetComponent<Rigidbody2D>();
// 刚体不会有选转;两种方法
this.body.freezeRotation = true;
// this.body.constraints = RigidbodyConstraints2D.FreezeRotation; // 计算玩家到camera的相对距离
if (this.bind_camera != null) {
this.offset = this.bind_camera.transform.position - this.transform.position;
}
} // 跳跃
void jump() {
this.body.AddForce(new Vector2(, ));
} void walk(int dir) {
Vector2 v = this.body.velocity;
if (dir < ) {
v.x = -;
this.transform.localScale= new Vector3(-, , );
}
else if (dir > ) {
v.x = ;
this.transform.localScale = new Vector3(, , );
}
this.body.velocity = v;
}
// Update is called once per frame
void Update () {
if (Input.GetButtonDown("Jump")) {
this.jump();
}
// 左边
else if (Input.GetAxisRaw("Horizontal") < ) {
this.walk(-);
}
// 右边
else if (Input.GetAxisRaw("Horizontal") > ) {
this.walk();
} if (this.bind_camera != null) {
// 摄像机位置的y,z不变,x随着主角的移动而移动
Vector3 new_position = this.offset + this.transform.position;
new_position.y = this.bind_camera.transform.position.y;
new_position.z = this.bind_camera.transform.position.z;
this.bind_camera.transform.position = new_position; // this.bind_camera.transform.position = this.offset + this.transform.position;
}
}
}

17.添加UI界面

a.再创建一个Canvas节点,和原来的Canvas是平级的

b.在新Canvas节点下面创建一个UI类型的Button节点

c.把Button的菊花改到左上角的那个图案,点击Button设置它的菊花,菊花的位置会跑到父节点Canvas的左上角那个点,那个点相对于Button来说就是原点位置。

d.设置Button的大小和它子节点Text的字体内容和字体大小。

注意:

游戏一般都是两层Canvas

1.一层是overlay模式处理GUI

2.一层是camera模式处理游戏内容

关于Unity中使用刚体制作简单跑酷案例的更多相关文章

  1. 关于Unity中的刚体和碰撞器的相关用法(二)

    在关于Unity中的刚体和碰撞器的相关用法(一)的基础上 有一个plane平面,一个ball球体,都挂了碰撞器,ball挂了刚体Rigidbody,写了一个脚本ball挂载在球体上,球体从空中落下装机 ...

  2. unity中的动画制作方法

    Unity中的动画制作方法 1.DOTween DoTween在5.0版本中已经用到了,到官网下载好插件之后,然后通过在项目中导入头using DG.Tweening;即可. 一些常用的API函数 D ...

  3. arduino中SCoop库的简单应用案例

    转载:https://www.csdn.net/gather_27/MtTaggzsMDExMS1ibG9n.html arduino中SCoop库的简单应用案例首先这篇文章来在视频https://v ...

  4. 关于Unity中的刚体和碰撞器的相关用法(一)

    1.创建一个3D工程 2.构造项目文件目录 3.保存场景为game_scene到文件夹scenes中 4.创建一个Plane平面类型的GameObject节点和一个Sphere球体类型的GameObj ...

  5. Unity中AB资源打包简单的脚本

    脚本应该放在Editor文件夹下 using System.Collections; using System.Collections.Generic; using UnityEngine; usin ...

  6. 关于Unity 中对UGUI制作任务系统的编程

    版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客&qu ...

  7. Unity中简单使用Opengl

    简介 由于项目特殊需求,需要在unity中使用一些OpenGL的东西来绘制图形(PS:其实就是有一个拖尾算法只有OpenGL版本~~~懒得改了,直接在unity中使用OpenGL算了).所以琢磨咯下如 ...

  8. Unity中制作游戏的快照游戏支持玩家拍快照

    Unity中制作游戏的快照游戏支持玩家拍快照 有些游戏支持玩家“拍快照”,也就是将游戏的精彩瞬间以图片的形式记录下来的功能.这个功能比较有趣,而且以后的用途也会很广,为此本节打算介绍:截取矩形区域内游 ...

  9. unity 中UGUI制作滚动条视图效果(按钮)

    1.在unity中创建一个Image作为滚动条视图的背景: 2.在Image下创建一个空物体,在空物体下创建unity自带的Scroll View组件: 3.对滑动条视图的子物体进行调整: 4.添加滚 ...

随机推荐

  1. scikit-learn 入门

    简介: scikit-learn是一个基于NumPy.SciPy.Matplotlib的开源机器学习工具包.採用Python语言编写.主要涵盖分类. 回归和聚类等算法,比如knn.SVM.逻辑回归.朴 ...

  2. asp.net导出excel-一行代码实现excel、xml、pdf、word、html、csv等7种格式文件导出功能而且美观-SNF快速开发平台

    分享: 腾讯微博  新浪微博   搜狐微博   网易微博  腾讯朋友  百度贴吧  豆瓣   QQ好友  人人网 作者:王春天  原文地址:http://www.cnblogs.com/spring_ ...

  3. ubuntu14中创建python虚拟环境

    一.安装python-virtualenv包 sudo apt-get install python-virtualenv 安装完成后,创建一个虚拟环境文件夹. mkdir VENVcd VENV 创 ...

  4. mysql-5.7 saving and restore buffer pool state 详解

    一.mysql 重启要面临的问题: 由于重启后之前innodb buffer pool中缓存的数据就都没有了,如果这个时候业务SQL来临,mysql就只能是从磁盘中 读取数据到内存:可能要经过数个小时 ...

  5. jquery的animate()方法也可设置非css属性

    如题,举例: $('body').animate({scrollTop:0}, 1500); $("body").animate({scrollTop:"-=" ...

  6. Android 常见面试题

    这些面试是我之前总结的 .觉得还不错,就贴出来与大家分享一下.当中有不少问题.也是我以前被面试官问过的问题,另一些基础问题总结(既然是基础知识 ,必定是成为一名的 Android 开发者 所必须掌握的 ...

  7. JAVA-从题目看算法,将输入字符串进行排序并输出

    来看一个排列的样例.它所做的工作是将输入的一个字符串中的全部元素进行排序并输出,比如:你给出的參数是"abc" 则程序会输出:abc acb bac bca cab cba 这是一 ...

  8. 20个可能你不知道Linux网路工具

    如果要在你的系统上监控网络,那么使用命令行工具是非常实用的,并且对于 Linux 用户来说,有着许许多多现成的工具可以使用,如: nethogs, ntopng, nload, iftop, iptr ...

  9. feginclient和ribbon的重试策略

    //自定义重试次数// @Bean// public Retryer feignRetryer(){// Retryer retryer = new Retryer.Default(100, 1000 ...

  10. JavaScript(js)文件路径字符串中丢失"\"斜线的解决方法

    在刚刚的开发过程中,遇到一个JavaScript 文件路径字符串中丢失"\"的问题,解决过程如下: 背景:cs文件中获取一段包含有路径信息的字符串,将此字符串做为参数传递给前台as ...