本文将利用Texture2D的自身的方法在Unity中实现子弹痕迹的效果
一、首先在网上down两张贴图(然后将弹痕背景透明化):
1、墙
2、弹痕
二、将贴图导入Unity并修改参数
1、保存可读可写
2、格式要对
三、在一个面片上挂载文章后面的脚本
1、如果不用for循环而用注掉的方法效果是这样的
2、而我们需要的是这样的
四、问题来了
实验表明,如果弹孔重叠,效果不好,像这样(暂时还没有好办法,欢迎指点!)
原码如下:
using UnityEngine;
public class bulletHole : MonoBehaviour
{
private Renderer m_Renderer;
private RaycastHit hit;
public Texture2D bolt;
void Awake()
{
//获取到渲染组件
m_Renderer = GetComponent<Renderer>();
}
void Update()
{
if (!Input.GetMouseButton(0)) return;
if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit))
{
Texture2D texture = (Texture2D)m_Renderer.material.mainTexture;
Vector2 point = hit.textureCoord;
point.x *= texture.width;
point.y *= texture.height;
//texture.SetPixels((int)point.x, (int)point.y, bolt.width, bolt.height, bolt.GetPixels());
for (int i = 0; i < bolt.width; i++)
{
for (int j = 0; j < bolt.height; j++)
{
Color c = bolt.GetPixel(i, j);
if (c.a >= 0.2f)
{
texture.SetPixel((int)point.x + i, (int)point.y + j, c);
}
}
}
texture.Apply();
}
}