Unity 代码片段2017篇

转载 2017年02月07日 22:20:20

"<color=#FFFF00>dfafd</color>" Unity打印自定义颜色log



static publicTLoadAsset<T> (stringpath)where T: Object

    {

        Object obj = LoadAsset(path);

        if (obj ==null)return null;

 

        T val = obj asT;

        if (val !=null)return val;

 

        if (typeof(T).IsSubclassOf(typeof(Component)))

        {

            if (obj.GetType() ==typeof(GameObject))

            {

                GameObjectgo =obj as GameObject;

                return go.GetComponent(typeof(T))asT;

            }

        }

        return null;

    }

 

 

 

   public delegate void ActionClick(ActorData data);

public event ActionClick ActorDataDelegate;

 

 

public staticTCreateItemIcon<T>(ItemNumitemNum,Transformparent =null) where T : Object

   {

       GameObject go = ResUtil.LoadGameObject("UI/CommonIcon/ItemIconInfo");

       if (parent !=null)

            parent.AddChildEx(go.transform);

       go.name =string.Format("Item{0}",itemNum.ItemId);

       go.GetComponentOrAdd<ItemIconInfo>().Data =itemNum;

       T obj = go asT;

       if (obj !=null)return obj;

       if(typeof(T).IsSubclassOf(typeof(Component)))

       {

            //if (go.GetType() == typeof(GameObject))

            {

                return go.GetComponent(typeof(T))asT;

            }

       }

       return null;

    }



代码生成AnimatorController

private void CreateAnimatorController(List<AnimationClip> clipList)
{
//创建一个控制器
AnimatorController animatorController = AnimatorController.CreateAnimatorControllerAtPath("Assets/youkexueyuan.controller");
//获取控制器的layer
AnimatorControllerLayer layer = animatorController.layers[0];
//获取状态机
AnimatorStateMachine machine = layer.stateMachine;
//添加一个坐标,让状态从这个位置开始摆放,防止状态乱摆,巨丑
Vector3 dpos = new Vector3(300,0,0);
foreach(AnimationClip clip in clipList)
{
AnimatorState state = new AnimatorState(); //machine.AddState(clip.name);
state.motion = clip;
state.name = clip.name;
machine.AddState(state, dpos);
dpos += new Vector3(0,50,0);//改变下一个坐标,让状态排成一列
if(state.name.Equals("idle"))
{
machine.defaultState = state;//设置默认状态
}
}
}

代码拷贝FBX模型动画剪辑

AnimationClip dstClip = new AnimationClip();
        dstClip.name = srcClip.name;
        string copyPath ="Assets/xiaobao.anim";
        AssetDatabase.CreateAsset(dstClip, copyPath);
        //拷贝Clip的浮点数据
        EditorCurveBinding[] bindings = AnimationUtility.GetCurveBindings(srcClip);
        for (int i = 0; i &lt; bindings.Length; i++)
        {
            AnimationUtility.SetEditorCurve(dstClip, bindings[i], AnimationUtility.GetEditorCurve(srcClip, bindings[i]));
        }
        dstClip.frameRate = 30.0f;

Mesh材质合并
using UnityEngine;
using System.Collections;

public class Combine_Test : MonoBehaviour {

    // Use this for initialization
    void Start ()
    {
        //---------------- 先获取材质 -------------------------
        //获取自身和所有子物体中所有MeshRenderer组件
        MeshRenderer[] meshRenderers = GetComponentsInChildren<MeshRenderer>();  
        //新建材质球数组
        Material[] mats = new Material[meshRenderers.Length];  
        for (int i = 0; i < meshRenderers.Length; i++) {
            //生成材质球数组 
            mats[i] = meshRenderers[i].sharedMaterial;   
        }
        //---------------- 合并 Mesh -------------------------
        //获取自身和所有子物体中所有MeshFilter组件
        MeshFilter[] meshFilters = GetComponentsInChildren<MeshFilter>();  
        CombineInstance[] combine = new CombineInstance[meshFilters.Length];   
        for (int i = 0; i < meshFilters.Length; i++) {
            combine[i].mesh = meshFilters[i].sharedMesh;
            //矩阵(Matrix)自身空间坐标的点转换成世界空间坐标的点 
            combine[i].transform = meshFilters[i].transform.localToWorldMatrix;
            meshFilters[i].gameObject.SetActive(false);
        } 
        //为新的整体新建一个mesh
        transform.GetComponent<MeshFilter>().mesh = new Mesh(); 
        //合并Mesh. 第二个false参数, 表示并不合并为一个网格, 而是一个子网格列表
        transform.GetComponent<MeshFilter>().mesh.CombineMeshes(combine, false);
        transform.gameObject.SetActive(true);

        //为合并后的新Mesh指定材质 ------------------------------
        transform.GetComponent<MeshRenderer>().sharedMaterials = mats; 
    }
    
    // Update is called once per frame
    void Update () {
        
    }
}



反编译游戏资源得到的都是Altas大图片变成单张图片

  1. usingUnityEngine;
  2. usingSystem.Collections;
  3. usingUnityEditor;
  4. usingSystem.IO;
  5. publicclassSlipTexture:EditorWindow
  6. {
  7. publicTexture2DMainTex=null;
  8. [MenuItem("Window/分割图集")]
  9. publicstaticvoidCreateWindows()
  10. {
  11. SlipTexture sp =EditorWindow.CreateInstance<SlipTexture>();
  12. sp.title="分割图集";
  13. sp.Show(true);
  14. }
  15. voidOnGUI()
  16. {
  17. MainTex=EditorGUILayout.ObjectField("mainText",MainTex,typeof(Texture2D))asTexture2D;
  18. if(MainTex!=null)
  19. {
  20. if(GUILayout.Button("导出成小图片"))
  21. {
  22. string path =AssetDatabase.GetAssetPath(MainTex);
  23. TextureImporter importer =AssetImporter.GetAtPath(path)asTextureImporter;
  24. if(importer.textureType!=TextureImporterType.Sprite||
  25. importer.spriteImportMode!=SpriteImportMode.Multiple||
  26. importer.spritesheet.Length==0
  27. )
  28. {
  29. Debug.LogError("当前图片不是Sprite Multiple格式 或者没有分割");
  30. return;
  31. }
  32. importer.isReadable=true;
  33. AssetDatabase.ImportAsset(path);
  34. AssetDatabase.Refresh(ImportAssetOptions.ForceSynchronousImport);
  35. string savepath =EditorUtility.OpenFolderPanel("选择要保存的文件夹",Application.dataPath,"");
  36. if(!string.IsNullOrEmpty(savepath))
  37. {
  38. foreach(SpriteMetaData metaDatain importer.spritesheet)//遍历小图集
  39. {
  40. Texture2D myimage =newTexture2D((int)metaData.rect.width,(int)metaData.rect.height);
  41. for(int y=(int)metaData.rect.y; y < metaData.rect.y+ metaData.rect.height; y++)//Y轴像素
  42. {
  43. for(int x=(int)metaData.rect.x; x < metaData.rect.x+ metaData.rect.width; x++)
  44. myimage.SetPixel(x-(int)metaData.rect.x, y -(int)metaData.rect.y,MainTex.GetPixel(x, y));
  45. }
  46. //转换纹理到EncodeToPNG兼容格式
  47. if(myimage.format!=TextureFormat.ARGB32&& myimage.format!=TextureFormat.RGB24)
  48. {
  49. Texture2D newTexture =newTexture2D(myimage.width, myimage.height);
  50. newTexture.SetPixels(myimage.GetPixels(0),0);
  51. myimage= newTexture;
  52. }
  53. byte[] pngData = myimage.EncodeToPNG();
  54. //AssetDatabase.CreateAsset(myimage, rootPath + "/" + image.name + "/" + metaData.name + ".PNG");
  55. File.WriteAllBytes(savepath+"/"+ metaData.name+".PNG", pngData);
  56. }
  57. }
  58. }
  59. }
  60. }
  61. }

判断在不在摄像机裁剪范围
void Update()
	{
		if (renderer.IsVisibleFrom(Camera.main)) Debug.Log("Visible");
		else Debug.Log("Not visible");
	}

static function IsRenderedFrom(renderer : Renderer, camera : Camera) : boolean
{
    var planes = GeometryUtility.CalculateFrustumPlanes(camera);
	return GeometryUtility.TestPlanesAABB(planes, renderer.bounds);
}



unity代码加密

之前使用unity引擎写代码都是直接在Unity里面Create一个C#脚本,然后直接用Unity自带的Mono或者VS打开脚本就行了。                               ...
  • lly20000
  • lly20000
  • 2015年06月26日 17:48
  • 1797

最新Visual studio 2017无法支持最新Unity3d 2017相关解决方案

最近换了台电脑于是乎也就装了最新的VS2017来尝尝鲜,U3D也是用的2017版本,结果在使用过程中发现一些问题。可能有一些问题在老版本上也是会出现的,只是没有发现而已,以后遇到一些相关的坑会陆续在这...
  • u013700908
  • u013700908
  • 2017年12月03日 19:04
  • 592

Unity3D中的Animator动画控制

Unity3d 4.0新动画系统Mecanim初探(一) Unity4.0正式版终于跟大家见面了,早在之前的Bata版中,我们就发现有一个新的动画系统:Mecanim,据说Unity科技想在Unit...
  • hamenny
  • hamenny
  • 2014年03月12日 20:30
  • 6889

Python 常用的代码片段

原文地址对于Java开发者来说,第一次看见Python的语法可能觉得很奇怪。下面是一些常用的Python代码片段,但是这些代码并不是那么容易被新手开发者记住。这些常用代码片段叫作“具有Python语言...
  • guoyj21
  • guoyj21
  • 2015年09月02日 09:52
  • 124

Unity反编译-加密和混淆方式

写在前面:     目前绝大多数的unity ,但是无论是unity工程发布的包,还是C#工程本身,都存在容易被反编译的缺陷(比如用Reflector进行反编译)。一旦程序被反编译,我们的核心算法、...
  • chenggong2dm
  • chenggong2dm
  • 2014年12月22日 16:59
  • 8545

46 个非常有用的 PHP 代码片段

1.发送 SMS 在开发 Web 或者移动应用的时候,经常会遇到需要发送 SMS 给用户,或者因为登录原因,或者是为了发送信息。下面的 PHP 代码就实现了发送 SMS 的功能。 为了使用...
  • u010433704
  • u010433704
  • 2015年08月16日 14:00
  • 664

vs visual studio 2017 片段行为 在标识符后键入 ?-Tab 时包含片段 智能提示(IntelliSense)

vs visual studio 2017 片段行为 在标识符后键入 ?-Tab 时包含片段 智能提示(IntelliSense)...
  • shanxing200
  • shanxing200
  • 2017年04月15日 15:29
  • 3308

Visual Studio使用技巧,创建自己的代码片段

1.代码片段的使用示例在编写代码中常会使用代码片段来提高我们的编写代码的效率,如:在Visual Studio中编写一个for(int i = 0; i length;i++){ }这样的代码,我们...
  • Andrew_wx
  • Andrew_wx
  • 2014年07月16日 16:02
  • 3687

新手必备的常用代码片段整理(一)

以下内容来自多个开源项目的整理和自己的项目积累 拨打电话跳转至拨号界面发送短信唤醒屏幕并解锁判断当前App处于前台还是后台状态判断当前手机是否处于锁屏睡眠状态判断当前是否有网络连接判断当前是否是...
  • hello_word2
  • hello_word2
  • 2016年07月07日 20:53
  • 649

Unity编程笔录--Unity3D 导出的apk进行混淆和加固(防止反编译)

前言: 对于辛辛苦苦完成的apk程序被人轻易的反编译了,那就得不偿失了,这篇文章就是解决Unity打包出来的apk进行代码加固和混淆。   准备资料: 1:Obfuscator.zip  作用是代码混...
  • AdamBieber
  • AdamBieber
  • 2015年07月02日 23:47
  • 4848
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Unity 代码片段2017篇
举报原因:
原因补充:

(最多只允许输入30个字)