疯狂喷气机

2/3D游戏:2D

辅助插件:原生

游戏制作难度系数:初级

游戏教程网址:http://www.raywenderlich.com/69392/make-game-like-jetpack-joyride-unity-2d-part-1

1、控制摄像机跟随人物移动

    public GameObject targetObject; //目标对象
    private float distanceToTarget;
    void Start()
    {
        distanceToTarget = transform.position.x - targetObject.transform.position.x; //获取摄像机和对象在横坐标上的的距离
    }
    void Update()
    {
        float targetObjectX = targetObject.transform.position.x;
        Vector3 newCameraPosition = transform.position;
        newCameraPosition.x = targetObjectX + distanceToTarget;
        transform.position = newCameraPosition; //更新摄像机的位置
    }

2、检测对象是否落地

把floor地板层的Layer设置为Ground,对象的脚下设置一个监测点groundcheck,代码判断是否着地

 public LayerMask groundCheckLayerMask;//设置为地板层
 public GameObject groundcheck; //监测点
 bool isTouchGround;
 void CheckGround()
 {
     isTouchGround = Physics2D.OverlapCircle(groundcheck.transform.position, 0.1f, groundCheckLayerMask);
 }
Physics2D.OverlapCircle用法如下:
static Collider2D OverlapCircle(Vector2 point, float radius, int layerMask = DefaultRaycastLayers, float minDepth = -Mathf.Infinity, float maxDepth= Mathf.Infinity);
point:圆的中心
radius:圆的半径
layerMask:只在某些层过滤检测碰撞器
minDepth:只包括Z坐标(深度)大于这个值的对象
maxDepth:只包括Z坐标(深度)小于这个值的对象
描述:检测一个碰撞器是否与落在一个圆形区域(里面)。
圆形是由一个在世界空间中的中心点和它的半径定义出来的。层遮罩可以用于指定检测特定某些图层的对象。
虽然Z轴与2D的渲染或碰撞无关,但是你可以使用minDepth和maxDepth参数去排除一些对象基于他们的Z轴。如果有好几个碰撞器都落在(重叠)检测区域,那么最小的Z坐标的那个碰撞器将会被返回。如果没有碰撞器在区域中就返回Null了。
还要注意这个函数会分配内存给返回的Collider2D对象。在你需要频繁做这个检测的时候,可以使用OverlapCircleNonAlloc这个函数去避免这些开销。
还有这些: OverlapAreaOverlapPointOverlapCircleAllOverlapCircleNonAlloc.
3、设置粒子逐渐消失的

在粒子系统组件中搜索名为Color over Lifetime 的部分。通过选中这一分组名称左边的白色复选框来启用它。展开这一分组。
注:现在它仅仅是纯白色,如图2,而且由于你清楚的看到了火焰的橙色,这看起来可能有些奇怪。然而,颜色在终其生命周期中可以表现为不同的方式。以初始值为基础它与自身进行了相乘,而不是通过设置颜色来改变。由于白色不管自身相乘多少次还是会得到原始的颜色,所以你看到的总是橙色。但是你可以改变颜色的生命周期为一个梯度,设置最末端的颜色透明度为0.这一的话粒子就会逐渐的消失。Color over Lifetime中点击white color box,打开梯度编辑,如图3。选择top slider on the right,改变Alpha值为0。如图4,然后关闭梯度编辑即可!效果图如下:

  particleSystem.enableEmission 设置是否产生粒子颗粒
particleSystem.emissionRate 获取或设置粒子产生的频率(float)

4、顶点捕捉特性
对于屏幕中的每个背景元素,你可以基于每一个元素的大小来进行定位,但是移动对象的时候,如果要一直计算这些值的话就不是很方便了。
作为替代,你可以使用Unity的顶点捕捉特性,它可以让你很容易的就定位彼此相邻的元素。下面让我们看看它使多容易:

使用顶点捕捉的时候,你只需要在选择后按住V键,但是要记住是在移动游戏对象之前。

使用定点捕捉的更多细节

选择你要移动的房间背景对象,不要忘了释放鼠标键,然后按住V键,移动小飞鼠到你需要使用为支点的角落。

5、设置粒子不被UI遮挡

代码动态为粒子指定图层为最上层的图层,并且sortingOrder要最大即可!

particleSystem.renderer.sortingLayerName = "Default";
particleSystem.renderer.sortingOrder = 2;

6、添加动态背景

参考:https://www.youtube.com/watch?v=9bhkH7mtFNE

(1)首先你需要添加2个Quads,一个用来作为背景,一个用来作为前景。        

你可能会好奇为什么这里使用Quad,而不是典型的Sprite?是由于你不能改变Sprite的图像wrappinp模式。至少在这里不行。然后你需要改变wrapping模式来确保当我们图片不断向右移动时,材质是无缝的进行连接。你需要为每一个Quad设置一个材质,不用移动Quads来模拟移动,你只要在Quad内移动材质,对于背景和前景层采用不同的速度。

(2)将前景图和背景图两者的Texture Type从Sprite改为Texture,随后,将Wrap Mode属性设置为Repeat,点击应用。

(3)创建另一个Camera(Orthographic size:3.2),重命名为ParallaxCamera,主Camera被保留用来跟踪mouse。这个新的Camera将被用来渲染交差背景,并且不会移动。

(4)创建Quads,创建两个Quad对象,通过选择GameObjet\Create Other\Quad。命名第一个Quad为parallaxBackground,然后第二个为ParallaxForeground。拖动两个Quads到ParallaxCamera,添加他们为子项。为两个Quads附加相应的背景图和前景图,选择parallaxBackground,Scale为(11.36,4.92,0)。注意:你使用这个scale,因为背景图的尺寸为1136*492px。前景图片也这样设置。

(5)然后,在Hierarchy中选择parallax Foreground。你会看到一个Mesh Render的组件被添加了进来。点击Shader下拉框,选择Unlit\Transparent。在parallaxBackground上重复以上步骤.

(6)让Texture移动起来,你不需要移动Quads。取而代之的是,你需要移动Quad所附加的Textures,通过改变材质的偏移量。因为你设置了WrapMode至Repeat属性,它会自动连接。注意:并不是所有图片都适用这种情况,这些背景图片设计的时候就可以被用来相互连接。也就是说,如果你将背景图片水平串起来,图像的左边和右边会很自然的连接在一块。创建一个命名为ParallaxScroll的C#脚本,并将它与ParallaxCamera关联起来。

在MonoDevelop中打开该ParallaxScript,然后添加以下实例变量:

public Renderer background;

public Renderer foreground;

public float backgroundSpeed = 0.02f;

public float foregroundSpeed = 0.06f;

这些Render变量会保持每个到Quads中Mesh Render组件的引用,这样你就可以调整他们的Texture属性。这个backgroundSpeed和foregroundSpeed定义了每个背景的速度。

然后在Update中添加以下代码:

float backgroundOffset = Time.timeSinceLevelLoad * backgroundSpeed;

float foregroundOffset = Time.timeSinceLevelLoad * foregroundSpeed;

background.material.mainTextureOffset = new Vector2(backgroundOffset, 0);

foreground.material.mainTextureOffset = new Vector2(foregroundOffset, 0);

这个代码会定期更新Quad中texture的偏移量,也就是移动它们。它们的速度将会不同,因为这个脚本中用了backgroundSpeed和foregroundSpeed作为参数去计算偏移量。

切换回Unity,然后在Hierarchy中选择ParallaxCamera。拖拽ParallaxBackground Quad到ParallaxScroll脚本中的Background字段,以及ParallaxForeground到Foreground字段。

(7)修正Camers的次序。在Hierarchy中选择ParallaxCamera,然后在Inspector中,寻找Camera组件,然后将Depth属性设置为-2,注意:ParallaxCamera的Depth属性应该比Main Camera的Depth小,所以检查你的Main Camera Depth,然后据此保证Parallax Camera更小一些。不过,随后运行游戏,你会发现你从窗户看不到视差滚动的背景。

为了解决这个问题,在Hierarchy中选择Main Camera,然后将Clear Flags设置为Depth Only。这样它就不会清除由Parallax Camera绘出的背景。运行游戏,现在你可以从窗户中看到外面的风景了!

(8)当老鼠死后停止背景滚动,在MonoDevelop中打开ParallaxScroll脚本,然后添加以下公共偏移变量:public float offset = 0;

你会使用它,而不是Time.timeSinceLevelLoad,所以在Update中,使用以下代码替换掉你计算偏移量的代码。

float backgroundOffset = offset * backgroundSpeed;

float foregroundOffset = offset * foregroundSpeed;

现在,打开MouseController脚本,然后添加以下公共变量:public ParallaxScroll parallax;然后添加以下代码到FixedUpdate的末尾:

parallax.offset = transform.position.x;这样子,你就可以使用Mouse的Position来作为偏移量而不是时间。

转载于:https://www.cnblogs.com/MrZivChu/p/RocketMouse.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值