Unity弹痕制作
发表于2016-05-07
unity弹痕制作,做射击类游戏时,当子弹击中墙壁时,需要在墙上显示出来弹痕效果,在此将官网提供的一种方法实现一下。
主要思路:
第一:获取子弹击中位置
第二:转换击中位置为墙体材质UV贴图上的坐标
第三:将UV贴图上某一坐标(子弹击中位位置)的像素点颜色设置为我们需要的颜色如黑色,灰色等
做法如下
一、从网上随便找一张墙壁的图片,下载下来,拖到Unity项目中,然后点击图片按照下面红色框框里边设置如下
二、创建一个Plane,一个Material,将Material拖拽到Plane上,然后将上一步设置的图片拖拽到材质上
三、创建脚本 TTTT,代码如下
[csharp] view plain copy
using UnityEngine;
using System.Collections;
public class TTTT : MonoBehaviour {
Renderer renderer;
MeshCollider meshCollider;
RaycastHit hit;
void Update()
{
if (!Input.GetMouseButton(0))
return;
//从摄像机向鼠标点击位置发射一条射线
if (Physics.Raycast(camera.ScreenPointToRay(Input.mousePosition), out hit))
{
//如果射线碰撞到带有 Collider的模型获取渲染器和被击中模型的 MeshCollider
renderer = hit.collider.renderer;
meshCollider = hit.collider as MeshCollider;
}
//如果 renderer 或者 MeshCollider为空,退出(注:需要设置的模型必须挂有 MeshRenderer组件和 MeshCollider 组件)
if (renderer == null || renderer.sharedMaterial == null || renderer.sharedMaterial.mainTexture == null || meshCollider == null)
return;
//获取击中模型材质的贴图
Texture2D tex = (Texture2D)renderer.material.mainTexture;
//获取射线击中点在模型材质UV贴图上的坐标比例,x,y范围为 (0 - 1)
Vector2 pixelUV = hit.textureCoord;
Debug.Log("x " + pixelUV.x + " y " + pixelUV.y);
//比例乘以 图片宽高后得到击中点在UV贴图上的实际位置
pixelUV.x *= tex.width;
pixelUV.y *= tex.height;
//设置UV贴图上某一点的像素颜色,参数 1 x坐标,参数 2 y坐标,参数 3 颜色
tex.SetPixel((int)pixelUV.x, (int)pixelUV.y, Color.black);
//设置完成保存贴图
tex.Apply();
}
}
将脚本拖拽到场景中的一个物体上即可,运行,随意点击Plane,在点击位置即变成 一个个黑色小点点,(此处设置的为一个像素点大小的点,可能太小,根据需要自己绘制范围)
运行如下