Unity弹痕制作

发表于2016-05-07
评论1 2.5k浏览
  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,在点击位置即变成 一个个黑色小点点,(此处设置的为一个像素点大小的点,可能太小,根据需要自己绘制范围)
  运行如下

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引