Unityr入门操作_2D游戏制作_039

来源:互联网 发布:三级分销佣金软件 编辑:程序博客网 时间:2024/06/08 14:48

2d游戏是指二维交互式动画,也就是我们通常所说的‘2d动画’。
二维交互式动画的基本特征如下(主要是针对3d游戏):
⒈贴图(参考上一篇)
传统的2d游戏中的美术资源(人物行走、人物状态、地图等等)都是以png或jpg的图形文件渲染而成,而3d游戏中的美术资源多数是以模型为主.
⒉视角(正交)
2d游戏是没办法完成视角转换的.因为2d游戏的美术资源是平面图.即某种美术资源的前、后、左、右不能够同时出现在游戏里.但3d游戏却可以完成视角转换.
⒊渲染(两者的差异)
2d游戏的所有美术资源可以不经过引擎的渲染就能使用,但3d游戏的任何美术资源都必须经过引擎的渲染才能使用.

操作流程:
1首先我们要建立一个2D的工程(区别于3D的)(Unity4.3增加了原生的2D开发环境。):
这里写图片描述
创建完成后如下图:(此时没有灯光)
这里写图片描述
此时我们可以把2D变为3D:
首先我们要添加一个灯光
这里写图片描述
然而场景还是2D的,此时我们就要做下图的操作
这里写图片描述

这里写图片描述
这样场景就变为3D的了,但这只能修改一个场景,再次生成场景时,系统依旧默认是2D场景,如果你想更改这个设置,可以选择”Edit\Project Settings\Editor”打开编辑器设置,在”Default Behavior Mode”中改模式为2D,如下图:
这里写图片描述
“Default Behavior Mode”(默认行为模式)定义你项目在导入Assets时的默认导入设置,当设置为3D模式时,Unity假设你将导入的文件创建为纹理类型(如:PNG文件);当设置为2D时,Unity假定你想要的导入的资源为Sprite类型
2创建工作层
为了使游戏对象在场景中的层次不会错乱,可以创建不同的工作层来管理游戏对象,从而使2D游戏 场景的层次更加分明,游戏对象之间的操作也更加方便
设置层的途径如下:
Edit–>Project Settings–>Tags and Layers命令或者直接单击编辑器的右上方的Layers–>Edit Layers然后添加工作层
这里写图片描述
点击+号来添加工作层

接下来我来做一个2D的效果:
首先是导入资源

然后我们要做一个大背景
这里写图片描述

我们先来装饰一下天空(加个移动的动物)
首先将动物图片进行切割
这里写图片描述
然后创建序列帧动画,
添加一个2D游戏对象将第一个动画填入其中
这里写图片描述
点击对象然后Ctrl+6进入面板将所有这一序列帧图画拖入其中
这里写图片描述
修改samples值来调节动画执行的速度
这里写图片描述
这时我们就需要编写脚本来控制对象的移动
using UnityEngine;
using System.Collections;
public class SwaFly : MonoBehaviour {

//起飞点private Vector3 startPosition;//飞速public float speed;// Use this for initializationvoid Start () {//这里的高度和宽度经测验发现是屏幕大小的一半    Debug.Log(Screen.width);    Debug.Log(Screen.height);    Vector3 screenSize = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width, Screen.height, 0));    Debug.Log(screenSize);    float swanExtentsX = transform.GetComponent<Renderer>().bounds.extents.x;    transform.position = new Vector3(screenSize.x + swanExtentsX, transform.position.y, transform.position.z);    startPosition = transform.position;}// Update is called once per framevoid Update () {     //if (transform.position.x < -startPosition.x)    //{    //    transform.position = startPosition;    //}     if (transform.position.x < -startPosition.x)    {        transform.Rotate(Vector3.up*180);    }    if (transform.position.x> startPosition.x)    {        transform.Rotate(Vector3.up * -180);    }    transform.Translate(Vector3.right*-1*speed*Time.deltaTime);}

}
这里写图片描述
这时我们就要装饰地面了
我们可以添加几块土地,创建一个复制Ctrl移动
这里写图片描述
这是我们要考虑给地面加组件了(区别于3D我们这时添加组件都要添加2D的)
这里写图片描述
这里写图片描述
Linear Drag(摩擦力)
Angular Drag(旋转角摩擦力)
Gravity Scale(重力)
Constraints(冻结轴)
这里写图片描述
编写脚本随机生成
using UnityEngine;
using System.Collections;
public class CreateBall : MonoBehaviour {

//产生范围private float createRange;public GameObject objBall;//产生时间public float rate;// Use this for initializationvoid Start () {    Vector3 screenSize = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width, Screen.height, 0));    float ballExtentsX = objBall.transform.GetComponent<Renderer>().bounds.extents.x;     createRange = screenSize.x - ballExtentsX;}// Update is called once per framevoid Update () {    rate -= Time.deltaTime;    if (rate<0)    {        Vector3 position = new Vector3(Random.Range(-createRange, createRange), transform.position.y, transform.position.z);        GameObject ball = Instantiate(objBall, position, Quaternion.identity) as GameObject;        //下一个产生的时间,使游戏更随机        rate = Random.Range(0,2.5f);        Destroy(ball, 3);    }}

}
显现如下:
这里写图片描述
这时我们可以再添加一个游戏对象(针对碰撞器):
这是一种线性碰撞器
这里写图片描述
添加并编辑
这里写图片描述
这时我们要注意,程序运行时我们会发现如果保龄球进入帽子是画风比较尴尬,
这里写图片描述
这时就要用到层的深度了越深的层越后渲染,每层中越深越后渲染
这里写图片描述
这里写图片描述

添加粒子系统:
这里写图片描述
还是同一个注意点,注意层数和深度,否则粒子特效会被遮盖住。
帽子移动和粒子系统生效的脚本
using UnityEngine;
using System.Collections;
public class HatMove : MonoBehaviour {

private float hatMoveRange;public GameObject particleSystemPoint;public GameObject particle;// Use this for initializationvoid Start () {    Vector3 screenSize = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width,Screen.height,0));    float hatExtentsX = transform.GetComponent<Renderer>().bounds.extents.x;    hatMoveRange = screenSize.x - hatExtentsX;}// Update is called once per framevoid Update () {    Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);    float x = Mathf.Clamp(mousePosition.x, -hatMoveRange, hatMoveRange);    transform.position = new Vector3(x, transform.position.y, transform.position.z);}void OnTriggerEnter2D(Collider2D col){    GameObject objtemp = Instantiate(particle,transform.position, Quaternion.identity)as GameObject;     Destroy(col.gameObject);    Destroy(objtemp,1);}

}
效果图如下:
这里写图片描述

原创粉丝点击