zoukankan      html  css  js  c++  java
  • 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;
            }
        }

    分析

    根据枪射击到不同的材质,实例化不同的特效

    particle_dirt2particle_dirt

    子弹打到的痕迹

    子弹打在材质上表面留下的痕迹:贴花系统,没怎么看明白,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;
        }

     贴图

    imageimage

    imageimage

    imageimage

  • 相关阅读:
    mssql:tsql;创建表;给表添加约束;使用变量;事务,索引,视图;存储过程;触发器trigger;播放器http://www.smartgz.com/blog/Article/956.asp
    str.Replace(" ","");
    DataGrid分页;指定列的总和和平均值;显示鼠标背景色;弹出式窗口;
    .net 面试题 (1)
    数据绑定技术_单值数据绑定示例;将 DataTable,DataSet,DataView,DataReader 绑定到 DataGrid 控件示例;DataBinder.Eval;数组的值赋给ListBox1;Hashtable 绑定到;RadioButtonList;将XML 文件做为数据源绑定到控件
    Lession 17 Always young 保持年轻
    智力面试题
    Lession 16 A Polite request 彬彬有礼的要求
    几道 C 语言面试题
    建表的范例脚本,存储过程中参数的命名
  • 原文地址:https://www.cnblogs.com/zhaoqingqing/p/3542474.html
Copyright © 2011-2022 走看看