我的Unity(5)一点一滴 利用贴图制作弹痕
制作弹痕主要用到粒子系统的贴图融合,通俗的说就是把墙壁的纹理和子弹的纹理融合在一起。实现这个效果需要知道:
1UV坐标,
//对UV坐标的理解:
//1.UV坐标就是图片在屏幕上像素点的位置,【相当于x、y坐标】
//2.范围一般是[0,1].左下角是(0.0),右上角是(1.1)。
//3.U坐标=第U个像素点/图片的宽;
V坐标=第V个像素点/图片的高;
2 要知道队列的知识 ,使用空间是using System.Collections.Generic;入队列和出队列。
这个代码的功能是实现在屏幕上点击任意位置,在Plane上出现弹痕,过3秒后消失。
消失的时候需要用到队列知识。Queue
每一步都有注释,慢慢写,慢慢看
//命名空间
using System.Collections.Generic;
public class konglian : MonoBehaviour
{public Texture2D m_oldWallTexture;Texture2D m_newWallTexture;public Texture2D m_bulletTexture;//定义纹理的高宽,float m_wallTextureWidth;float m_wallTextureHeight;float m_bulletTextureWidth;float m_bulletTextureHeight;//创建一个队列。注意他的命名空间。Queue <Vector2> qua = new Queue<Vector2> ();void Start (){m_oldWallTexture = GetComponent <MeshRenderer> ().material.mainTexture as Texture2D;//调用旧的纹理作为效果图 不然最后的图渲染完之后,不能更改。m_newWallTexture = Instantiate (m_oldWallTexture);//使用这个纹理 理解为壁纸 GetComponent <MeshRenderer> ().material.mainTexture = m_oldWallTexture;//获得墙和子弹贴图的宽度和高度m_wallTextureWidth = m_newWallTexture.width;m_wallTextureHeight = m_newWallTexture.height;m_bulletTextureWidth = m_bulletTexture.width;m_bulletTextureHeight = m_bulletTexture.height;}Ray m_ray;RaycastHit m_hit;void Update (){//屏幕发射射线if (Input.GetMouseButtonDown (0)) {m_ray = Camera.main.ScreenPointToRay (Input.mousePosition);if (Physics.Raycast (m_ray, out m_hit)) {if (m_hit.transform.name == "Plane") {Vector2 UV = m_hit.point;//把射击的位置入队列qua.Enqueue (UV);//找到子弹贴图的原点位置,进行融合 需要定义 UV的位置是射击到的位置,以他为中心。i j是子弹的贴图大小。for (int i = 0; i < m_bulletTextureWidth; i++) {for (int j = 0; j < m_bulletTextureHeight; j++) {//注意i j是墙的整体像素的行和列,需要乘墙的宽度和高度 谁的坐标乘谁的。float w = (UV.x * m_wallTextureWidth - m_bulletTextureWidth / 2) + i;float h = (UV.y * m_wallTextureHeight - m_bulletTextureHeight / 2) + j;//获得像素,子弹在墙壁上的需要融合的位置,Color bulletPexis = m_bulletTexture.GetPixel (i, j);Color wallPexis = m_newWallTexture.GetPixel ((int)w, (int)h);//开始融合 像素之间相乘m_newWallTexture.SetPixel ((int)w, (int)h, wallPexis * bulletPexis);}}}//需要提交一下。融合完成后进行。m_newWallTexture.Apply ();Invoke("ReBack",3f);}}}
}
下面是让弹痕消失,原理一样,用旧的纹理,来补全有弹痕的纹理。
void ReBack (){//你想你射击,肯定是先射击出现的弹痕先消失,后出现的设计弹痕后消失,所以这里需要用到队列的知识。//取出第一个元素,并返回到UV,这个就是第一弹痕,需要让他消失,出队列。Vector2 UV = qua.Dequeue ();//同样的方法找到UV原点,得到子弹的像素点,只不过是和原来的贴图融合,for (int i = 0; i < m_bulletTextureWidth; i++) {for (int j = 0; j < m_bulletTextureHeight; j++) {float w = (UV.x * m_wallTextureWidth - m_bulletTextureWidth / 2) + i;float h = (UV.y * m_wallTextureHeight - m_bulletTextureHeight / 2) + j;//看清楚是旧的纹理,因为旧的没有修改过,读取,不能修改。Color wallPexis = m_oldWallTexture.GetPixel ((int)w, (int)h);显示的图是新修改的图。set方法。m_newWallTexture.SetPixel ((int)w, (int)h, wallPexis);}}//完成后记得提交m_newWallTexture.Apply ();}
同时 出现弹痕时提交的时候 ,调用ReBack方法,弹痕就会在3f。后消失。
Invoke(string name,float );
//方法是调用方法,几秒调用
如果有些错的地方欢迎大家指出来,共同指教。
我的Unity(5)一点一滴 利用贴图制作弹痕相关推荐
- 火焰效果材质实现_利用噪音图制作一个纸张燃烧的效果
写在前面 前几天有人在群里问怎么制作一个纸张被火烧掉的效果,刚好那天没那么忙,就尝试实现了一个,效果如下: 这个shader并不复杂,主要是对噪音图的使用,趁这次机会和大家分享一下 基础材质 纸张本身 ...
- Android带三角形的弹窗,andriod开发 利用.9图制作带三角形指示的popwindow弹窗
利用.9图做背景,配合使用popwindow和listview可以实现这个需求,也可以自定义popwindow的布局,画边框加阴影,自定义三角形的view,然后...然后我就放弃了这个思路,老老实实直 ...
- Unity中贴图制作备忘录
Unity中贴图制作备忘录 软件准备 3DsMAX.Unity.PS 制作方法 1.打开3dsMAX,执行展UV操作 3dsMax中的展UV操作. 格式保存为JPG格式. 2.再用PS打开刚才制作的图 ...
- [转载]你们要的GIF动图制作全攻略!看完就会做!(实操教程)
非常实用呀 原文地址:你们要的GIF动图制作全攻略!看完就会做!(实操教程)作者:木木老贼 来源:文案匠(ID:sun-work) 作者:一木(授权转载,如需转载请联系文案匠) 文章配图的GIF动图怎 ...
- 游戏建模小白必看的游戏人物模型贴图制作方法及制作小技巧
目前游戏行业快速发展,游戏对于现在的人来说,是不可缺少的,因为我们平时需要放松,我们的压力需要解放,所以有了游戏,游戏的发展是必须的,现在你说会被淘汰,我觉得是不可能,因为游戏的快速发展,现在关于游戏 ...
- 动态图册用HTML怎么制作,imgplay gif动图制作如何使用?imgplay图文使用教程
imgplay是一款利用图片.视频就能轻松制作GIF的应用软件.通过这款软件,大家可以切身感受拍照片和视频时的精彩瞬间,下面小编就为大家讲解imgplay软件的使用方法. 推荐下载: 软件名称:img ...
- leap motion java小程序_Motionleap动图制作神器app
Motionleap动图制作神器app是一款能够帮助用户更好地去编辑各种动图的软件,现在用户在聊天,或者是其他的社交过程中都喜欢发各种各样的动图来娱乐,想要自己拥有源源不断的动图,就可以利用这个软件来 ...
- 游戏建模初学者必看的游戏人物模型贴图制作方法及制作小技巧
目前游戏行业快速发展,游戏对于现在的人来说,是不可缺少的,因为我们平时需要放松,我们的压力需要解放,所以有了游戏,游戏的发展是必须的,现在你说会被淘汰,我觉得是不可能,因为游戏的快速发展,现在关于游戏 ...
- 免装版_无缝贴图制作软件 PixPlant2中文免装版
点击上方蓝字关注我们 如您喜欢我们的公众号,不妨推荐给身边的朋友 资源介绍: 资源来源于网络,很多时候我们从网上找的贴图并不是无缝的,而且一般都没有高光/法线 贴图这些,在材质的模拟上就要差了很多,在 ...
最新文章
- DBgrid 第一列加入CheckBox,点击列头 全选/全消
- IDEA使用从Eclipse过来的快捷键
- 常用html字符的转义字符串(html代码),全部转义字符备用
- java 解析 datatabe,在JAVA实现DataTable对象(一)
- pydev中使用wxpython找不到路径的问题
- ida模拟器调试_IDA pro远程调试折腾记
- linux系统支持什么格式的软件吗,UOS系统支持什么样的软件包格式:其实Deb,Rpm,Tar.gz源码包都行...
- ML for trading -cs7646-03
- 关于管理者应该拥有的的六十…
- U1C3 介绍SketchEngine和Web语料库研究
- 驱动程序安装全攻略1
- 国标GB28181协议视频平台EasyGBS国标级联到上级宇视平台,不断切换在线和离线状态是什么原因?
- earth orientation parameter(EOP)地球指向参数
- MC9S12XS128nbsp;16位PWMnbsp;电…
- 维谛(Vertiv)培训中心迁新址,再攀培训业务新高峰
- 用于学术论文阅读外文学习的高效翻译工具——多译
- 节日循环彩灯电路逻辑设计(使用74LS194二片)
- 物流云管理系统-免费版
- 制作三星I9088 刷机ROM的实践(四)
- YOLOv5+DeepSORT多目标跟踪与计数精讲(含行人计数和车辆计数)