创建基本的2D场景(part2)

  让我们继续来学习Unity2D游戏场景的制作,本文分为以下3个部分:

· 添加角色和控制

. 添加2D物理阻挡

· 添加2D效果

  通过制作一个移动帽子接保龄球的小游戏,我们可以学习到任何创建游戏对象,使用2D物理引擎和制作2D特效等。

·  添加角色和控制

  1. 创建游戏主角帽子

   帽子整体由Hat和HatFrontSprite两部分组成,为了让保龄球在被帽子接住时达到进入帽子的视觉效果,我们设置帽子的属性如下两张图所示。Hat的层级为0,而HatFrontSprite的层级为2,我们只要将保龄球的层级设置为1,就可以到达效果了。

  为帽子添加刚体,并且防止帽子下落。选择菜单栏中的命令,Component——Physic 2D——Rigidbody 2D(刚体)。在帽子的Inspector视图中,将Gravity Scale设置为0,防止帽子下落。选中Freeze Rotation Z 来固定帽子的角度,

  2. 创建保龄球

  创建好保龄球sprite后,为了让保龄球有自由下落的效果,我们为它添加刚体。选择菜单栏中的命令,Component——Physic 2D——Rigidbody 2D(刚体)。为了让保龄球与其他碰撞体之间有碰撞效果,选择Component——Physic 2D——Circle Colider 2D(2D圆形碰撞体)。

  如果不给保龄球添加刚体,那么游戏中的保龄球就不会自由下落。

  在游戏中,我们要生成多个保龄球,所以要将保龄球sprite制作成Prefab。将Hierarchy视图中的sprite直接拖到Project视图的文件夹中,就可以制作成预设体了。如下图所示:

  3. 创建脚本来控制保龄球帽子

  我们先创建一个空的游戏对象GameController,创建一个C#脚本也名为GameController,然后将GameController脚本拖到GameController对象上。

public class GameController : MonoBehaviour {
    public GameObject ball;
    private float maxWidth;
    private float time = 2;
    private GameObject newball;
    // Use this for initialization
    void Start () {
        //将屏幕的宽度转换成世界坐标
        Vector3 screenPos = new Vector3(Screen.width, 0, 0);
        Vector3 moveWidth = Camera.main.ScreenToWorldPoint(screenPos);
        //获取保龄球自身的宽度
        float ballWidth = ball.GetComponent<Renderer>().bounds.extents.x;
        //计算保龄球实例化位置的宽度
        maxWidth = moveWidth.x - ballWidth;
    }

    void FixedUpdate () {
        time -= Time.deltaTime;
        if (time < 0)
        {
            //产生一个随机数,代表实例化下一个保龄球所需的时间
            time = Random.Range(1.5f, 2.0f);
            //在保龄球实例化位置的宽度内产生一个随机数,来控制实例化的保龄球的位置
            float posX = Random.Range(-maxWidth, maxWidth);
            Vector3 spawnPosition = new Vector3(posX, transform.position.y, 0);
            //实例化保龄球,10秒后销毁
            newball = (GameObject)Instantiate(ball, spawnPosition, Quaternion.identity);
            //如果不写时间的话,组件会被马上销毁的
            Destroy(newball, 10);
        }
    }
}

   再来创建一个脚本HatController来控制帽子的移动,然后将HatController脚本拖到Hat对象上。

public class HatController : MonoBehaviour {
    public GameObject effect;
    private Vector3 rawPosition;
    private Vector3 hatPosition;
    private float maxWidth;
    // Use this for initialization
    void Start () {
        //将屏幕的宽度转换成世界坐标
        Vector3 screenPos = new Vector3(Screen.width, 0, 0);
        Vector3 moveWidth = Camera.main.ScreenToWorldPoint(screenPos);
        //计算帽子的宽度
        float hatWidth = GetComponent<Renderer>().bounds.extents.x;
        //获得帽子的初始位置
        hatPosition = transform.position;
        //计算帽子的移动宽度
        maxWidth = moveWidth.x - hatWidth;
    }

    // Update is called once per physics timestep
    void FixedUpdate () {
        //将鼠标的屏幕位置转换成世界坐标
        rawPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);//设置帽子将要移动的位置,帽子移动范围控制
        hatPosition = new Vector3(rawPosition.x, hatPosition.y, 0);//限制value的值在min和max之间
        hatPosition.x = Mathf.Clamp(hatPosition.x, -maxWidth, maxWidth);
        //帽子移动
        GetComponent<Rigidbody2D>().MovePosition(hatPosition);
    }}

  现在,在游戏中我们可以看到保龄球从天上随机不同位置掉落,但保龄球下落后,会穿过草地。帽子则会跟着鼠标左右移动。

 ·  添加2D物理阻挡

  先给HatFrontSprite添加边缘碰撞体,Component——Physics 2D——Edge Collider 2D(2D边缘碰撞体)。然后再给Hat添加一个触发器,用来判断保龄球是否进入帽子,在Inspector视图中选中Is Trigger复选框。给Hat添加一个Edge Collider 2D组件,在编辑Edge Collider 2D之前,要先点击Edit Collider按钮,让Edge Collider 2D组件包裹住Hat。编辑过程要有耐心,需要不断地调整,学会编辑后,最好把编辑过程录制成视屏,以后忘记了的话,就可以按照视屏来操作。如下图所示:


  为了让帽子能够持续地接取保龄球,我们要在保龄球进入触发器后删除保龄球。于是我们在HatController脚本中添加如下代码:

    void OnTriggerEnter2D(Collider2D col)
    {
        //删除该碰撞物体
        Destroy(col.gameObject);
    }

  为了让保龄球落到草地上后,不再下落,我们要给草地也添加一个碰撞体。GameObject——Create Empty,命名为ground,Component——Physics 2D——Box Collider 2D,设置ground属性如下图:

  现在,保龄球落到地面上后会被被地面挡住,我们移动帽子接到保龄球,不管你是否接到了保龄球,一段时间后,保龄球都会自动消失。

· 添加2D效果

  为了让帽子接到了保龄球后会出现火花粒子特效,现在让我们来制作一个简单的特效。先将粒子效果资源包导入到项目中,点击Import按钮导入即可。

  

导入Effects资源之后,设置Effects粒子预设体的Inspector面板中的Renderer属性。

  在HatController中添加帽子接取到保龄球之后,产生的粒子效果代码。

public class HatController : MonoBehaviour {
    public GameObject effect;
    private Vector3 rawPosition;
    private Vector3 hatPosition;
    private float maxWidth;
    // Use this for initialization
    void Start () {
        //将屏幕的宽度转换成世界坐标
        Vector3 screenPos = new Vector3(Screen.width, 0, 0);
        Vector3 moveWidth = Camera.main.ScreenToWorldPoint(screenPos);
        //计算帽子的宽度
        float hatWidth = GetComponent<Renderer>().bounds.extents.x;
        //获得帽子的初始位置
        hatPosition = transform.position;
        //计算帽子的移动宽度
        maxWidth = moveWidth.x - hatWidth;
    }

    // Update is called once per physics timestep
    void FixedUpdate () {
        //将鼠标的屏幕位置转换成世界坐标
        rawPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        //print(rawPosition);
        //设置帽子将要移动的位置,帽子移动范围控制
        hatPosition = new Vector3(rawPosition.x, hatPosition.y, 0);
        //print(hatPosition);
        //限制value的值在min和max之间
        hatPosition.x = Mathf.Clamp(hatPosition.x, -maxWidth, maxWidth);
        //帽子移动
        GetComponent<Rigidbody2D>().MovePosition(hatPosition);
    }

    void OnTriggerEnter2D(Collider2D col)
    {
        GameObject neweffect = (GameObject)Instantiate(effect, transform.position, effect.transform.rotation);
        neweffect.transform.parent = transform;
        //删除该碰撞物体
        Destroy(col.gameObject);
        Destroy(neweffect, 1.0f);
    }
}

为HatController脚本添加粒子效果组件。

  最终游戏效果:

时间: 2024-11-03 22:41:22

创建基本的2D场景(part2)的相关文章

创建基本的2D场景(part1)

通过一个简单的2D游戏案例来学习unity 2D游戏开发,本文分为以下4个部分. · 创建工作层 · 添加静态景物 · 制作2D动画 · 添加角色和控制 · 添加2D效果 通过这个案例,我们可以学习到unity2D游戏制作的基本流程,Sprite的创建和使用,2D物理引擎,2D的特效的使用等这些常用的知识点. 3D游戏场景中的摄像机一般使用透视模式(Perspective),2D游戏场景中的摄像机是正交模式的(Orthographic),如果在此案例中你不幸选择了透视模式(Perspective

NGUI使用教程(2) 使用NGUI创建2D场景并且添加标签和按钮

1.创建2D场景 要使用NGUI创建2D场景,首先咱们必须新建一个项目,并且导入NGUI作为这个项目的插件,相信如果看过上一篇教程都知道怎么导入NGUI了,这里就不赘述,如果有疑问的可以去看上一篇教程.这里我已经导入成功了.在菜单中可以看到NGUI的菜单 在工程面板中可以看到有NGUI的文件夹 接下来咱们可以点击菜单中的[NGUI]-->[Create]-->[2D UI],创建成功后在Hierarchy面板中可以看到多了一个UI Root 点开UI Root可以看到UI Root底下有一个C

Unity3D学习笔记之七创建自己的游戏场景

到现在为止我们已经拥有了比较完备的Prefab,已经可以创建宏大的游戏场景,并以第一人称视角在场景中漫游了.这里给大家做个小的示范,建一个小场景大家在创建场景的时候需要自由发挥,做个尽量大的场景出来. 这一系列教程以及素材均参考自人人素材翻译组出品的翻译教程<Unity游戏引擎的基础入门视频教程>,下载链接附在第二篇学习笔记中. 我们以最初的添加了First Person Controller的PFB_Straight为整个场景的中心点来展开.我们先从Project中Prefabs文件夹拖出来

Three-js 创建第一个3D场景

1.一个场景至少需要的三种类型组件 相机/决定哪些东西将在屏幕上渲染    光源/他们会对材质如何显示,以及生成阴影时材质如何使用产生影响    物体/他们是在相机透视图里主要的渲染队形:方块.球体等 2.浏览器兼容 Moziller Firefox:4.0版本以后开始支持:    Google Chrome:第9版以后开始支持    Safari:5.1版本开始支持:    Opera:12.00版本以后开始支持.要让Opera支持WebGL,你还需要打开opera:config文件,设置We

灵感闪现 篇 (一) 2d场景 3d 效果

中途打断一下 ,框架文档的 更新. 另开一篇主题为 灵感闪现的 板块. 在工作生活中,总有发现新事物或新东西 而让自己突然 灵感闪现的时候,那么这个时候,我必须要抓住,并尽快把 这份灵感实现下来. 之前,开发框架的时候,也是因为有了灵感,才会不断更新,为了更快抓住 最新灵感,我特意开此 贴,连续更新的 文档我还会继续更新, 但 优先权 灵感的东西 总是排在最前面. 这次的灵感是 无意中看了 <白猫计划>游戏的一个功能. 他的场景是2d ,人物是3d,但是 当你移动场景 ,他也能模仿3d这样 近

【Unity】4.0 第4章 创建基本的游戏场景

分类:Unity.C#.VS2015 创建日期:2016-04-05 一.简介 上一章我们学习了如何利用长方体(Cube)制作基本的3D模型,以及如何导入各种资源,本章将在此基础上,分别制作路面.跳板.树.灯光.水面.火光.--等,从而构建一个完整的游戏场景,最后再使用第1人称视图在场景中走一趟,看看各处展现的效果. 二.本章示例运行效果 本章的所有例子都在ch04Demos工程中.

2d场景背景无限滚动

之前都是直接借用的DoTween插件,两个背景无限交替位置进行,还有就是三个背景在利用Trigger进行判断显示与否循环: 示例脚本: private List<RectTransform> m_ScrollGroup; private RectTransform[] _ts; void Awake() { m_ScrollGroup = new List<RectTransform>(); _ts = transform.GetComponentsInChildren<Re

【浅墨Unity3D Shader编程】之一 游戏场景的创建 &amp; 第一个Shader的书写

本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 邮箱: [email protected] 作为一个系统介绍Unity3D中Shader编写的系列文章的开篇,本文的第一部分系列文章的前言,然后第二部分介绍了这个系列文章中我们会使用的游戏场景创建方式,最后一部分讲解了如何在Un

【淡墨Unity3D Shader计划】一间 创建一个游戏场景 &amp;amp; 第一Shader写作

本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 邮箱: [email protected] 作为一个系统介绍Unity3D中Shader编写的系列文章的开篇.本文的第一部分为系列文章的前言,然后第二部分介绍了这个系列文章中我们会使用的游戏场景创建方式.最后一部分解说了怎样在U