unity做2d游戏怎么用代码换精灵

unity做2d游戏怎么用代码换精灵,第1张

public UnityEngine.Sprite sprite2D

{

get

{

return mSprite

}

set

{

if (mSprite != value)

{

RemoveFromPanel()

mSprite = value

nextSprite = null

MarkAsChanged()

}

}

}

也就是说sprite2D是可设置和可获取的,那么我们只需要写一个脚本,然后在其中实例化这个脚本,然后调用这个方法就可以了。UI2DSprite.sprite2D 就能对其进行设置了。

其实是利用UI层的Mask实现遮罩,有些不同的是Mask的图片是用Camera渲染到RenderTexture动态产生的纹理实现的。

大概步骤如下:

1 分层渲染,建立Mask蒙版层。

2 河流设置为Mask层。

3 建立Mask Camera,只渲染Mask蒙版层

4 创建脚本MatchScreenRenderTexture,创建与窗口匹配的RenderTexture,令Mask Camera渲染到该RenderTexture中。

5 创建脚本MaskScript,建立一个MaskShader(类似于全屏特效),令MaskCamera渲染的颜色部分背景部分透明变成不透明,即反转Alpha。

6 建立UI Image。设置Image为窗口大小,设置使用MatchScreenRenderTexture中的蒙版纹理。

7 添加Mask组件,令Image遮罩住船精灵的部分。

ImageEffect MaskScript:

[csharp] view plain copy

using UnityEngine

using System.Collections

[ExecuteInEditMode]

[AddComponentMenu("Tracy/MaskShader")]

public class MaskScript : MonoBehaviour {

public Shader maskShader = null

static Material m_Material = null

public Texture background

protected Material material

{

get

{

if (m_Material == null)

{

m_Material = new Material(maskShader)

m_Material.hideFlags = HideFlags.DontSave

}

return m_Material

}

}

protected void OnDisable()

{

if (m_Material)

{

DestroyImmediate(m_Material)

}

}

// Use this for initialization

void Start () {

if (!SystemInfo.supportsImageEffects)

{

enabled = false

return

}

// Disable if the shader can't run on the users graphics card

if (!maskShader || !material.shader.isSupported)

{

enabled = false

return

}

}

void OnRenderImage(RenderTexture source, RenderTexture destination)

{

int rtW = source.width

int rtH = source.height

RenderTexture buffer = RenderTexture.GetTemporary(rtW, rtH, 24)

material.SetTexture("_Background", background)

Graphics.Blit(buffer, destination, material)

RenderTexture.ReleaseTemporary(buffer)

}

}

MaskShader

[cpp] view plain copy

Shader "Tracy/MaskShader" {

Properties{

_MainTex("Base (RGB)", 2D) = "" {}

_Background("Background Texture",2D) = ""{}

}

// Shader code pasted into all further CGPROGRAM blocks

CGINCLUDE

#include "UnityCG.cginc"

struct v2f {

float4 pos : SV_POSITION

float2 uv : TEXCOORD0

}

sampler2D _MainTex//摄像机的输出画面作为纹理

sampler2D _Background//背景

sampler2D_float _CameraDepthTexture//没用,修改自StandardAsset的imageeffect

v2f vert(appdata_img v)

{

v2f o

o.pos = mul(UNITY_MATRIX_MVP, v.vertex)

o.uv = v.texcoord.xy

return o

}

float4 frag(v2f i) : SV_Target

{

//float d = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, i.uv.xy)

//d = Linear01Depth(d)

float4 c = tex2D(_MainTex, i.uv.xy)

float4 cbg = tex2D(_Background, i.uv.xy)

return float4(cbg.r, cbg.g, cbg.b, 1 - c.a)//翻转alpha

}

ENDCG

Subshader {

Pass{

ZTest Always Cull Off ZWrite Off

CGPROGRAM

#pragma vertex vert

#pragma fragment frag

ENDCG

}

}

Fallback off

} // shader

unitypackage:

这里

点击打开链接

Sprites是个用于角色、道具、炮d以及其他2D游戏元素的二维图形对象

2D游戏的图像部分主要是图片的处理,图片通常称为Sprite精灵

为了提高2d游戏的效率,会将图片资源拼接成一张大图,在游戏运行的时候在将这张图的莫一部分读取出来作为Sprite显示在屏幕上

该图形是基于Texture2D得到的图像。Sprite类主要识别图像的一部分用于特定的精灵。

此类通过游戏对象上的SpriteRenderer组件应用并实际显示该图像。

1.导入一张大图到引擎中

2.选中图片将Texture Type设为如图1-2所示的Sprite(2D and UI)与Sprite Mode设置为Multiple就可以将这张大图切割成若干小图形

3.点击如图1-2所示的Sprite Editor打开编辑窗口

然后就可以根据自己的需求切割图片的大小,切割好后就会在你原来图片的目录下看到切割的图片

2D物理引擎

1.Rigidbody2D 二维刚体

与Rigidbody类似,添加Rigidbody2D组件到一个精灵上置于物理引擎的控制下。就其本身而言,这意味着精灵会受到重力的影响并可以从脚本使用力控制。通过添加合适的碰撞器组件,该精灵也会响应与其他精灵碰撞。

也可以通过点击Component->Physics 2D就可以看到2D刚体

2.2D碰撞器组件(Collider2D)

注意 :碰撞器调用 俩个物体都必须有 碰撞体 其中一个必须有刚体

触发器: 俩个物体必须都有碰撞体,其中一个必须是刚体,并且其中一个开启Is Trigger

与Collider功能相同,但是只能作用于二维场景

通过点击Component->Physics 2D也是可以看到

如图1-6所示可以通过各属性设置2D物理组件

函数

1.voidOnCollisionEnter2D(Collision2D coll)

当传入的碰撞器接触到这个对象的碰撞器时发送(仅2D物理)。

2.voidOnCollisionExit2D(Collision2D coll)

当另一个对象上的碰撞器停止接触这个对象的碰撞器时发送(仅2D物理)。

3.voidOnCollisionStay2D(Collision2D coll)

当另个对象的碰撞器正在触碰这个对象的碰撞器时,每帧发送(仅2D物理)。

4.voidOnTriggerEnter2D(Collider2D other)

当另个对象的碰撞器进入到这个对象的触发碰撞器时发送(仅2D物理)。

5.voidOnTriggerExit2D(Collider2D other)

当另个对象的碰撞器离开这个对象的触发碰撞器时发送(仅2D物理)。

6.voidOnTriggerStay2D(Collider2D other)

当另个对象的碰撞器停留在这个对象的触发碰撞器内时每帧发送(仅2D物理)。

实例(类似愤怒的小鸟简单实现)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11605272.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存