Unity Sample Bootcamp
M4枪 射击特效
Gun.js源码
function GenerateGraphicStuff(hit : RaycastHit)
{
var hitType : HitType; var body : Rigidbody = hit.collider.rigidbody;
if(body == null)
{
if(hit.collider.transform.parent != null)
{
body = hit.collider.transform.parent.rigidbody;
}
} if(body != null)
{
if(body.gameObject.layer != 10 && !body.gameObject.name.ToLower().Contains("door"))
{
body.isKinematic = false;
} if(!body.isKinematic)
{
var direction : Vector3 = hit.collider.transform.position - weaponTransformReference.position;
body.AddForceAtPosition(direction.normalized * pushPower, hit.point, ForceMode.Impulse);
}
} var go : GameObject; var delta : float = -0.02;
var hitUpDir : Vector3 = hit.normal;
var hitPoint : Vector3 = hit.point + hit.normal * delta; switch(hit.collider.tag)
{
case "wood":
hitType = HitType.WOOD;
go = GameObject.Instantiate(woodParticle, hitPoint, Quaternion.FromToRotation(Vector3.up, hitUpDir)) as GameObject;
break;
case "metal":
hitType = HitType.METAL;
go = GameObject.Instantiate(metalParticle, hitPoint, Quaternion.FromToRotation(Vector3.up, hitUpDir)) as GameObject;
break;
case "car":
hitType = HitType.METAL;
go = GameObject.Instantiate(metalParticle, hitPoint, Quaternion.FromToRotation(Vector3.up, hitUpDir)) as GameObject;
break;
case "concrete":
hitType = HitType.CONCRETE;
go = GameObject.Instantiate(concreteParticle, hitPoint, Quaternion.FromToRotation(Vector3.up, hitUpDir)) as GameObject;
break;
case "dirt":
hitType = HitType.CONCRETE;
go = GameObject.Instantiate(sandParticle, hitPoint, Quaternion.FromToRotation(Vector3.up, hitUpDir)) as GameObject;
break;
case "sand":
hitType = HitType.CONCRETE;
go = GameObject.Instantiate(sandParticle, hitPoint, Quaternion.FromToRotation(Vector3.up, hitUpDir)) as GameObject;
break;
case "water":
go = GameObject.Instantiate(waterParticle, hitPoint, Quaternion.FromToRotation(Vector3.up, hitUpDir)) as GameObject;
break;
default:
return;
} go.layer = hit.collider.gameObject.layer; if(hit.collider.renderer == null) return; if(timerToCreateDecal < 0.0 && hit.collider.tag != "water")
{
go = GameObject.Instantiate(bulletMark, hit.point, Quaternion.FromToRotation(Vector3.forward, -hit.normal));
var bm : BulletMarks = go.GetComponent("BulletMarks");
bm.GenerateDecal(hitType, hit.collider.gameObject);
timerToCreateDecal = 0.02;
}
}
分析
根据枪射击到不同的材质,实例化不同的特效


子弹打到的痕迹
子弹打在材质上表面留下的痕迹:贴花系统,没怎么看明白,Decal System
文档资料
http://game.ceeger.com/Components/shader-NormalDecal.html
http://docs.unity3d.com/Documentation/ScriptReference/RaycastHit-textureCoord.html
BulletMarks.js 重点代码
#pragma strict
#pragma implicit
#pragma downcast enum HitType
{
CONCRETE,
WOOD,
METAL,
OLD_METAL,
GLASS,
GENERIC
} class BulletMarks extends MonoBehaviour
{
public var concrete : Texture2D[];
public var wood : Texture2D[];
public var metal : Texture2D[];
public var oldMetal : Texture2D[];
public var glass : Texture2D[];
public var generic : Texture2D[]; public function GenerateDecal(type : HitType, go : GameObject)
{
var useTexture : Texture2D;
var random : int;
switch(type)
{
case HitType.GENERIC:
if(generic == null) return;
if(generic.Length == 0) return; random = Random.Range(0, generic.Length); useTexture = generic[random];
break;
.......
default:
if(wood == null) return;
if(wood.Length == 0) return; random = Random.Range(0, wood.Length); useTexture = wood[random];
return;
} transform.Rotate(new Vector3(0, 0, Random.Range(-180.0, 180.0))); Decal.dCount++;
var d : Decal = gameObject.GetComponent("Decal");
d.affectedObjects = new GameObject[1];
d.affectedObjects[0] = go;
d.decalMode = DecalMode.MESH_COLLIDER;
d.pushDistance = 0.009 + BulletMarkManager.Add(gameObject);
var m : Material = new Material(d.decalMaterial);
m.mainTexture = useTexture;
d.decalMaterial = m;
d.CalculateDecal();
d.transform.parent = go.transform;
}
贴图






Unity Sample Bootcamp的更多相关文章
- 台北Unity开发者研讨会 笔记
本文转自:http://ndark.wordpress.com/2013/05/12/20130511-台北unity开发者研讨会-笔记/ (墙外) 说明 本文单纯只是笔记,若有笔误敬请见谅. 相关参 ...
- Re:Unity游戏开发有哪些让你拍案叫绝的技巧?
这是我在知乎一个问题: <Unity游戏开发有哪些让你拍案叫绝的技巧?> 下面的回答,觉得蛮有趣的,贴在这里和博客的朋友们分享下. ----- 分享一个比较好玩的内容吧. 大家都知道Uni ...
- (一)Hololens Unity 开发环境搭建(Mac BOOTCAMP WIN10)
(一)Hololens Unity 开发环境搭建(Mac BOOTCAMP WIN10) 系统要求 64位 Windows 10 除了家庭版的 都支持 ~ 64位CPU CPU至少是四核心以上~ 至少 ...
- unity, 立即生效动画:Animation.sample()
在调用了动画播放之后,动画并不会立即应用(骨骼Transform并不会立即改变),最快也要等到本帧lateUpdate才能生效. 如果有特殊需求,希望在调用了动画播放之后立即生效,则可以紧接着调一句A ...
- unity 拿shadowmap/ sample shadow map/拿_ShadowMapTexture
https://gamedev.stackexchange.com/questions/96051/unity-5-how-to-get-a-shadowmap UNITY_DECLARE_SHADO ...
- unity vr sample on htc vive
http://forum.unity3d.com/threads/unity-vr-samples-now-available.372753/
- unity free asset
Unity Test Tools https://www.assetstore.unity3d.com/#/content/13802 Sample Assets (beta) https://www ...
- Unity AssetBundle爬坑手记
这篇文章从AssetBundle的打包,使用,管理以及内存占用各个方面进行了比较全面的分析,对AssetBundle使用过程中的一些坑进行填补指引以及喷! AssetBundle是Unity推荐的 ...
- Unity: Passing Constructor Parameters to Resolve
In this tutorial we will go through of couple different ways of using custom constructor parameters ...
随机推荐
- Android 提供的一系列辅助系统开发工具
除了软件本身的代码之外,Android 还提供了一系列工具来辅助系统开发,这些主要的工具包括: aapt(AndroidAssetPackagingTool):用于建立zip兼容的包(zip.jar. ...
- C++之多态的一个例子
[例12.1] 先建立一个Point(点)类,包含数据成员x,y(坐标点).以它为基类,派生出一个Circle(圆)类,增加数据成员r(半径),再以Circle类为直接基类,派生出一个Cylinder ...
- jQuery owlcarousel 旋转木马
owlcarousel是一款猫头鹰旋转木马插件.OwlCarousel优势兼容所有浏览器支持响应式支持 CSS3 过度支持触摸事件支持 JSON 及自定义 JSON 格式支持进度条支持自定义事件支持延 ...
- webpack常用的插件安装命令
webpack常用的插件安装命令:1:npm install html-webpack-plugin --save-dev //自动快速的帮我们生成HTML.2:npm install css-loa ...
- WCF服务部署到IIS7.5
下面介绍如何把WCF服务部署到IIS: 为WCF服务创建.svc文件 我们知道,每一个ASP.NET Web服务都具有一个.asmx文本文件,客户端通过访问.asmx文件实现对相应Web服务的调用.与 ...
- oracle断电重启之ORA-01033和ORA-01172
参考文献: ORA-01033:解决方法 数据库掉电后 ORA-01172 磁盘坏块解决方法 --尝试连接数据库prjdb C:\Documents and Settings\Administrato ...
- GitHub 基本常用知识解答2
1.如何拥有一个Git仓库的两种途径 (1)在已有的目录中,初始化一个新的. (2) 比如一个新的项目,或者一个已存在的项目,但该项目尚未有版本控制.如果你想要复制一份别人的项目, 或者与别人合作某个 ...
- iOS开发笔记4:HTTP网络通信及网络编程
这一篇主要总结iOS开发中进行HTTP通信及数据上传下载用到的方法.网络编程中常用的有第三方类库AFNetworking或者iOS7开始新推出的NSURLSession,还有NSURLSession的 ...
- 如何修改opencms数据库配置
修改/webapps/opencms/WEB-INF/config/opencms.properties文件 什么情况下需要修改配置? 1. 使用过程中,修改数据库配置: 2. 太长时间没接触服务器, ...
- JQuery EasyUI中datagrid的使用
在学习过程中,可以参照JQuery EasyUI的官方网站学习.地址:http://www.jeasyui.com/demo/main/index.php 在学习JQuery EasyUI中的Data ...