unity

Unity中制作游戏的快照游戏支持玩家拍快照

喜欢而已 提交于 2019-12-07 20:12:12
Unity中制作游戏的快照游戏支持玩家拍快照 有些游戏支持玩家“拍快照”,也就是将游戏的精彩瞬间以图片的形式记录下来的功能。这个功能比较有趣,而且以后的用途也会很广,为此本节打算介绍:截取矩形区域内游戏视图,并将其显示在视图其它区域的方法。具体的操作步骤如下本文选自 Unity游戏开发技巧集锦 : ( 1 )在 Project 视图里,创建一个 C# 脚本文件,并命名为 ScreenTexture 。在此脚本中编写如下的代码: 01 using UnityEngine; 02 using System.Collections; 03 04 public class ScreenTexture : MonoBehaviour 05 { 06 // 公有成员 07 public int photoWidth = 50; // 矩形的宽度 08 public int photoHeight = 50; // 矩形的高度 09 public int thumbProportion = 25; // 截图的显示比例 10 public Color borderColor = Color.white; // 矩形框架的颜色 11 public int borderWidth = 2; // 矩形框的宽度 12 // 私有成员 13 private Texture2D texture; 14

Unite Beijing 2015大型活动

狂风中的少年 提交于 2019-12-06 22:50:23
记得,上次在北京参加大型活动还是2008年前–传统电信行业的巅峰时期;那时移动互联网、Android、IOS还是萌芽状态。 七年过去了,IT行业翻天覆地的巨大变化,传统电信行业在慢慢的陨落,与此同时,移动互联网确在快速的崛起。 我个人做为技术从业者,在经历了三天的《Unite Beijing 2015 》活动后,感触颇深,故筑以作文以记之。 First Day:4月18日 (周六) 关键词 :2015 第三届游戏蛮牛杯、人数近500人 现在的北京,与4年前不可同日而语:超先进的地铁系统,北京西站不用出站,换乘地铁可达城里任何地方。 这张图是在地铁4号线拍照的,本来要拍地铁手游广告的,但是广告旁边站了PLMM,我不敢拍,只能拍了我左侧的这张图—“让您的凌云之旅尽享卓越” 记忆中的地铁8号线的青花瓷–依旧美丽。 天气不算好,远处拍一张鸟巢吧。 气势磅礴的《国家会议中心》 Unite大会首日有免费的VR Day和收费的新手训练营 超过200个座位的新手训练营,瞬间就爆满了 备注:我打听了一下我周围的学员,5人中有4人是自费从外地(陕西、重庆、上海、苏州、成都)赴京参加学习的。 和Unity全球副总合影,倒不是对洋人崇拜(我好歹也是外企嘛。) 是因为一个洋人,千里迢迢,从美国飞过来,对中国人民的技术盛会这么鼓励,呵呵。 备注:左侧的黑黑的小伙子,重庆大学大一学生,首次离家,独自来京参加大会

Unity中使用GPU Instancing优化SkinnedMesh渲染

主宰稳场 提交于 2019-12-06 22:12:11
有这么个需求: 一堆不会动的SkinnedMesh, 通过物理模拟出死亡姿势后, 需要优化性能, 不然才10FPS 首先想到的做法是转成StaticMesh. 试了一下直接超出了Unity的顶点Index数量限制, 所以放弃, 再说转换完后也不方便编辑. 另一个思路就是使用Instanced Skinned Mesh Rendering, 找到两个参考: https://github.com/Unity-Technologies/Animation-Instancing https://github.com/chengkehan/GPUSkinning 不过这两个实现都是考虑了Animation的, 会采样AnimationClip的Transform序列帧写入纹理. 直接拿来是没法用的, 所以就参考他们的做法自己也实现了个Instancing的优化. 大家做SkinnedMeshInstancing的思路都差不多, 所以整个优化的流程就比较容易理清了: 把SkinnedMesh转换成StaticMesh, 把每个顶点的蒙皮混合权重和骨骼索引写到顶点的color/uv1/uv2, 通常情况下都是4个bone index加上4个blend weight. 每个SkinnedMesh的Pose都是一系列的变换矩阵, 去掉一行后做为3个Color写入RGBAHalf纹理

Unity插件 - MeshEditor(八)模型镜像特效

孤人 提交于 2019-12-06 22:11:46
将静态模型(带MeshFilter)按指定轴向、指定距离克隆一个镜像物体出来,思路很简单,将模型的顶点坐标按指定轴取反,并累加上设定的距离值,然后就完毕了!不过,因为镜像体的顶点镜像于之前模型的顶点,所以三角面的渲染顺序要变,面的渲染,在unity中,因为一个三角面是以这个三角面的三个组成顶点的顺时针顺序渲染的,镜像颠倒以后,面的渲染顺序正好相反,模型的面正好全部渲染到相反方向(不过感觉像是一个做双面材质的笨办法),这里将所有三角面保存的顶点信息整体倒置一遍就正好倒置了所有面的渲染方向了。 感觉有点绕,例如,一个面有三个顶点组成,分别是1,2,3,他们是这样分布的: 渲染顺序为1,2,3的话,就是渲染的面向屏幕之外的这个面,渲染顺序为1,3,2的话,就是渲染的面向屏幕之内的这个面。 基本情况就是这样了。 接下来是代码: 第一步: 重新生成镜像物的顶点: /// <summary> /// 生成镜像顶点 /// </summary> Vector3[] GenerateVertices(Vector3[] oldVertices) { Vector3[] newVertices = oldVertices; //镜像所有顶点 switch (_MirrorDirection) { case MirrorDirection.x: for (int i = 0; i <

unity 中带贴图以及动画的模型文件转为 lowpoly 风格的方法

旧城冷巷雨未停 提交于 2019-12-06 22:11:28
本篇讲述的是使用代码来修改的方法,其实unity已经给我们提供了设置的方法:Normals选择Calculate,Smoothing Angle调整为0即可。 这里的内容是在这篇文章的基础上进行的修改: https://blog.csdn.net/final5788/article/details/50574055 原文章中主要是没有提到UV以及骨骼与定点的绑定方法。 由于实现lowpoly的风格其实就是将原来的1个点复制为多个点,所以我们只要在复制定点的过程中将相应的顶点属性一同复制即可。 这里直接给出完整代码: using UnityEngine; using UnityEditor; public class LowPolyTool : MonoBehaviour { //制作Unity顶部菜单栏 [MenuItem("LowPolyTool/LowPoly")] static void LowPoly() { Transform[] transforms = Selection.transforms; for (int i = 0; i < transforms.Length; i++){ LowPoly(transforms[i]); } } static void LowPoly(Transform t){ MeshFilter meshFilter = t

Unity动画系统-配置Avatar

元气小坏坏 提交于 2019-12-06 21:28:44
首先我们所有的人形动画的骨骼都大致相似,比如头,胳膊,腿等,唯一不同的可能是骨骼的数量不同。所以Unity为我们建立一套标准的骨骼,我们需要把自己的骨骼映射到标准骨骼中,这样我们就可以实现人形动画的重用(不同人物的动画通用)。 点击Configure配置Avatar sense场景:绿色代表我们建模的骨骼的位置。 右边属性栏: (骨骼设置和肌肉设置) 那么到底如何配置Avatar: 首先查看骨骼的映射是否正确,Unity会自动为我们配置一遍,一般是没有问题的,但也需要我们确认一遍 这个是建模时的骨骼: 这个是Unity为我们映射的骨骼: 我们需要做的就是 1看这些骨骼是不是一一对应的。 在系统的映射谷歌中:实心表示关键位置的骨骼,必须对应。虚线表示可选骨骼,不对应也可以。灰色表示没有对应的骨骼。 如果都是绿色的就表示没有问题,有问题是红色的。 2.看人物是否以T姿势站立。 我们在建模的时候人物会有一个默认的站立姿势, 选择Pose 1)回到默认姿势 2)普通姿势 3)T姿势 我们需要选择T姿势。 有的时候,角色的骨骼发生一些小的偏差,系统不会判定错误,但是我们在动画中可以看到效果,比如把腿旋转小幅度,系统是不会判定错误的,但是我们肉眼可以看到细微的差别,这样就需要我们自己去调节一下。 确保无误以后,我们就可以Apply保存。 把我们的所有动画都应用到这个Avatar。 来源:

Unity3d 简单的Avatar换装系统

廉价感情. 提交于 2019-12-06 21:24:48
换装所涉及的其实就是SkinnedMeshRenderer,它包含了网格,骨骼,材质; 首先,需要一个源Model,它包含了换装所需要的所有东西。 带Bip字眼的是骨骼; 然后需要就是我们的目标,只有骨骼; 换装的过程就是将Source中对应的SkinnedMeshRenderer信息复制到Target上,这里的信息就是网格,骨骼,材质; 下面,一步步来: 1、将Source实例化到场景当中,保存他的Transform,这样可以在隐藏Source对象之后,仍然可以访问到子对象当中的SkinnedMeshRenderer组件 /// <summary> /// 源 包含所有组件 /// </summary> private Transform source; /// <summary> /// 源的临时GameObject /// </summary> private GameObject tempsource; /// <summary> /// 初始化源source 加载Prefab->Source到场景中,设置SetActive为false,并保存它的Transform /// 源是不需要显示的 /// </summary> void InstantiateAvatar() { //Prefab FemaleSource包含所有需要的组件 皮肤、骨骼…… tempsource

Unity 3D Avatar换装系统 SkinnedMeshRenderer皮肤渲染

痞子三分冷 提交于 2019-12-06 21:24:24
版本:unity 5.4.1 语言: C# 参考了《 Unity3D 实战核心技术详解》,我把换装系统的一个核心技术记录一下,本人虽然是在U3D开发,不过没有真正接触到这样的技术,感觉比较遗憾,这里做个入门,万一以后有相关需求的话,心里也有底。 首先说下人物模型的构成:除去动画以外,名称中有 Bip字样的节点都是骨骼、其他的就是我们能看的到的皮肤。 骨骼就是一些 Transfrom,没有其他的组件,它们会根据动画的要求进行运动。 而皮肤上关键的一个组件是 SkinnedMeshRenderer,它关联了3样东西:1.网格;2.骨骼;3.材质。所以我们只要在代码中改变以上三样东西,就能替换模型上的部件。 来看一下具体的代码吧: public Transform target; // 目标的模型,要求其骨骼已经存在 public Transform source; // 源模型,所有的可以替换的部件都在这上面 // 模型资源,对应上面的source Dictionary<string, Dictionary<string, Transform>> data = new Dictionary<string, Dictionary<string, Transform>>(); // 目标骨架,对应上面的target Transform[] hips; // 目标皮肤,替换这里面的内容就行了

Unity3D游戏开发之设置Avatar

倖福魔咒の 提交于 2019-12-06 21:24:05
MecAnim通过Avatar这个代理来实现设置角色动画中的骨架和蒙皮。动画类型(Animation Type)选择人形动画(Hmumanoid)。Avatar设定选择 “Create From This Mode”。则可以为这个模型定义Avatar。如果选择 “Copy From Other Avatar”,则可以从其他定义好的Avatar拷贝过来。 在 Avatar Definition 选择 “Create From This Model”的情况下,点击一下应用(Apply)按钮。“ Configure…” 按钮变为可用状态。 点击Configure… 按钮。(如果需要保存当前场景在弹出对话框中选择save保存当前场景。)配置Avatar。 Inspector面板中Mapping选项卡下 可以看到骨骼的匹配情况,一般情况下都可以很好的正确匹配(绿色显示)。 如果需要修改,可以重新设置一下骨骼和avatar中节点的对应关系。 如果不需要修改,可以直接点完成(Done)。 通过创建Avatar中的Muscles选项卡,实现角色动画中蒙皮到Unity的映射,也就是说, 通过该映射,Unity可以设置角色中的蒙皮信息。肌肉(Muscles)设置关节直接运动限制。 来源: CSDN 作者: 七大黍 链接: https://blog.csdn.net/book_longssl

【转载】Unity3d引用外部的dll

[亡魂溺海] 提交于 2019-12-06 20:16:34
Unity3D 能够很方便的集成一些外部插件,以便调用现有的动态链接库。下面会介绍Unity中如何集成Dll的两种方法。 1. 标准引用 这里所使用的语言是C#。 1.1 新建C#类库项目,这里就不多介绍了。 1.2 项目建好后正常的编写代码。 以上是一个简单的测试代码。 1.3 将项目属性 -> 应用程序 -> 目标框架:改为 .NET Framework 3.5或以下 。这一步很重要,因为Unity3D(当前的Unity3D版本是3.5版) 支持的 .Net 是3.5版。 如果选择的是4.0版会出现 Internal compiler error. See the console log for more information. output was:Unhandled Exception: System.TypeLoadException: Could not load type 'System.Runtime.Versioning. 错误。 1.4 生成解决方案。到此,C# Dll工作完成。 1.5 导入Dll到Unity中。将Dll拷贝到Assets目录下任何一个目录都可以。一般是在Plugins目录中,因为Dll大多是外部功能块,同时也方便跨语言调用。 1.6 在Unity中编写简单代码。 1.7 运行结果。 2. Unity的方案 官网指出