unity

Unity之Animation动画

我们两清 提交于 2020-04-08 06:33:16
Unity之Animation绘制动画 这篇文章做最简单的动画,让一个立方体从左边移动到右边。 1.创建一个Unity的新工程,名为TestAnimation,点击Create And Open按键,打开工程。 2.进入工程之后,点击File->Save Scene。 点击之后会弹出一个文本框,在文件名处输入testAnimation,点击保存按钮。在Project处就可以看到testAnimation的产生。 3.在Hierarchy中点击右键,选择3D Project->Cube。 在Scene中出现Cube。 4.点击Hierarchy中的Cube,在Inspector窗口中出现Cube所有的组件,点击Add Component,搜索Animation,选择Animation。 Cube就多了Animation组件 Animation组件参数解析: Animation:默认的动画; Animations:所有的组件, Size:组件的个数; Element X:组件; Play Automatically:是否在开始的时候自动播放默认的动画; Animate Physics:如果打开这个选项,动画会在物理循环过程中被执行,只有在结合运动学刚体的时候才有用。 Culling Type:Based On Renderers:当渲染不可见时,动画被禁用。 Always

Unity贪吃蛇游戏制作过程

萝らか妹 提交于 2020-04-06 08:21:24
成果展示 操作步骤 新建一个2D工程项目,导入资源包 。新建三个文件夹,分别命名为“Scene”,“Prefebs”和“Scripts”,用于存放游戏场景,制作的预制件和脚本。 新建一个plane,命名为BackGround,附上资源包中的Ground材质。添加一个灯光,给游戏场景打光。新建一个Cube,命名为SnakeHead,附上SnakeHead材质。新建一个Cube,命名为SnakeBody,附上SnakeBody材质,并拖入Prefebs文件夹。再新建一个Cube,命名为Food,附上Food材质,拖入Prefebs文件夹,由于后期食物随机产生。在BackGround中新建四个空项目,当作游戏场景的边界,当蛇碰到边界或者自己的身体的时候,游戏结束。注意:要删去背景的Box Collider组件,否则蛇身会一直碰到背景,导致游戏无法运行。 新建一个脚本,命名为MoveSnake,通过这个脚本让贪吃蛇动起来。脚本内容如下: using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Linq; using UnityEngine.SceneManagement; public class MoveSnake : MonoBehaviour { List

Unity目录结构设置

可紊 提交于 2020-04-05 14:51:45
摄像机 Main Camera 跟随主角移动,不看 UI 剧情摄像机 当进入剧情时,可以关闭 main camera,启用剧情摄像机,不看 UI UI 摄像机 看 UI Unity编辑器常用的settings File->Build Settings File->Build Settings->Player Settings File->Build Settings->Player Settings->Other Settings Edit->Project Settings 坐标 Unity 中 Z 轴朝前(在本地坐标中) 默认在 Transform 中看到的是本地的坐标,角度,缩放 控制器 分类 主角控制器(移动,打怪 ) 怪物控制器(巡逻,打主角) NPC 控制器(没有 AI,没有移动,仅仅是发布任务等简单的功能) 精灵(Sprite) 包括 主角 Boss 怪物 NPC 目录结构 特定 Editor:放在此下面的脚本在创建 C# 脚本时会调用,可以实现自定义模板 Plugins/iOS/PC Resources:预制体放在此目录下用于加载 StreamingAssets:在游戏运行时此目录是只读的 Hierachy:场景物体 通用 Editor Plugins/iOS/PC Resources Role UI StreamingAssets Audio Effects

unity3d随机地牢生成代码

房东的猫 提交于 2020-04-02 17:34:05
现在也是处于失业状态,碰巧看到个面试题是要用unity生成个随机地牢,就把做题过程中的思路和代码记录一下吧。 做完了以后我又想了一下,发现其实根本不需要这么麻烦,果然demo里的代码对我的思路影响还是有点大。demo里的c++代码为了展示地牢的墙壁,在二维数组中加上了wall这个东西表示墙壁。事实上用unity来做的话,只需要考虑地板的位置,然后根据邻接的地板有没有东西来判断是否生成墙壁即可。 Demo 使用素材以及题目地址: http://pan.baidu.com/s/1c2l3RFE 密码:aseh 首先用一个枚举类型代表地牢迷宫中的各个元素: public enum Tile { Default, DirtFloor,// 房间地板 Wall_w,//上方的墙 Wall_s,//下方的墙 Wall_a,//左方的墙 Wall_d,//右方的墙 Corridor_ad,//横向走廊 Corridor_ws,//纵向走廊 Door,// 房门 UpStairs,// 入口 DownStairs// 出口 } 然后考虑使用二维数组来保存地牢元素的信息。既然是用unity来做,先不考虑随机地牢的逻辑数组要怎么生成,先把二维数组转化为实体的方法写出来: 建立一个test脚本,用于测试生成用的creat_dungeon方法是否好用,并在里面定义一个测试用的二维数组: using

Unity---DOTween插件学习(2)---设置参数、Ease曲线、回调函数、动画控制函数

ε祈祈猫儿з 提交于 2020-03-31 05:11:22
目录 6、Set设置参数 7、Ease曲线 8、回调函数 9、动画控制函数 目录 6、Set设置参数 7、Ease曲线 8、回调函数 9、动画控制函数 本文及系列参考于Andy老师的DOTween系列 欢迎大家关注 Andy老师 6、Set设置参数 在 Unity 中添加一个 Cube ,并挂载这个脚本 SetLoops():设置循环 //参数1.循环次数(-1表示无限循环) //参数2.循环方式 //Yoyo:来回运动 //Restart:重新开始(运动完马上返回原来状态再接着运动) //Incremental:一直朝着一个方向运动 transform.DOMove(Vector3.one, 2).SetLoops(-1,LoopType.Yoyo); SetAutoKill():设置自动杀死动画 transform.DOMove(Vector3.one, 2).SetAutoKill(true); From():反向 //from(反向运动,从目标点运动回起始点) //true为增量运动,false则为目标值运动。无参默认为目标值运动 transform.DOMove(Vector3.one, 2).From(true); SetDelay():设置延时执行 transform.DOMove(Vector3.one, 2).SetDelay(2); SetSpeedBased(

Unity3d基本优化条目

こ雲淡風輕ζ 提交于 2020-03-29 12:16:53
mac上用MarsEdit写博文很难改成和windows live writer上格式一样,也就将就了,以后都当笔记来做博文,坚持手写,杜绝慵懒的复制 几乎我们所有的优化概念都告诉我们 第一条,要想程序运行更流畅就要牺牲更多的内存,作为代价,用内存换流畅,比方说 近处的贴图质量高,远处使用低质量的贴图(mipmap),近处使用高模远处使用低模(Lod) 第二条,用CPU换内存,例如在资源不使用的情况下Destory掉,然后用诸如:Resource.UnloadUnUsedAsserts或者是gc释放,但是这个调用可能很频繁,增加CPU负担 第三条,合理使用看项目需求而定,优化是有条目的,作为开发人员可以抓住最基本优化套路,然后遵循项目的具体需要酌情考虑 简单考虑从三个方面入手 资源方面,引擎方面,代码方面 美术资源方面 动态物体{ 控制面片数量 300 - 2000 控制skinned mesh为一个 控制材质数量1-3个 控制骨骼数量小于30根 } 静态物体{ 控制网格的顶点数小于500个 标记为static,static batching内部会优化,例如三个物体标记static会在一个drawcall渲染 注意:即使使用了static,不同的shader还是会增加drawcall,增加一种不同类型的材质(即使材质使用的都是同一个shader),增加一个drawcall

如何降低Unity程序的Drawcall

久未见 提交于 2020-03-29 12:10:10
【 如何降低Unity程序的Drawcall 】   Unity can combine a number of objects at runtime and draws them together with a single draw call. This operation is called “batching”   每帧能够有多少 batch依赖于 cpu。每个 drawcall提交多少个三角形,对 cpu压力变化不大,但是每帧有多少个 drawcall则影响很明显。      Currently, only Mesh Renderers 、 Trail Renderers 、 Line Renderers 、 Particle Systems and Sprite Renderers are batched. This means that skinned Meshes , Cloth , and other types of rendering components are not batched.    Skinned Meshes 不能被合批。    一、Dynamic Batching。   Dynamic Batching会自动进行。有与顶点呈线性相关的overhead。所以只对顶点数小于900的mesh进行batch。     1)如果 Position ,

Unity本地数据存储---Sqlite和JSON

喜你入骨 提交于 2020-03-27 22:19:15
2014-05-04更新 SqliteDatabase.cs这个文件的初始方法有问题,具体是如果指定URL已经存在了DB文件,就不会重新覆盖DB文件。 这导致我们修改之后的DB文件无法产生效果。 本人的解决办法是在游戏启动的界面,通过对比本地的Resources目录下的文件A,和玩家核心数据B里面的数据库版本号, 如果A>B,则判定本地的DB文件版本较老,需要更新。 具体代码请到目录SQLite篇下下载 2014-04-30更新 剔除了使用网络上烂大街的SQLite使用方法(原因android下无法读取数据),使用libSQLite3.so,通过DLLImport,在C#代码里直接调用C接口 这种原生调用SQLite的方式,我在pc、android上亲测无误,ios没测过,但是stackoverflow上有兄弟试过,没问题。园子的朋友如果可以测IOS的,欢迎提供结果 基本思路,游戏基础配置数据,比如怪物的属性、装备模板属性、关卡怪物等,使用SQLite(Unity插件SQLiteUnityKit- GitHub地址 ,推荐客户端 SQLite Expert Personal 3 ),管理方便 玩家核心数据(属性、装备、技能)使用JSON格式,加密保存在Application.persistentDataPath路径里,避免每次升级被覆盖 插件本地下载地址 Sqlite框架

Unity3D 物体移动方法总结

谁都会走 提交于 2020-03-27 06:35:12
1. 简介 在Unity3D中,有多种方式可以改变物体的坐标,实现移动的目的,其本质是每帧修改物体的position。 2. 通过Transform组件移动物体 Transform 组件用于描述物体在空间中的状态,它包括 位置(position), 旋转(rotation)和 缩放(scale)。 其实所有的移动都会导致position的改变,这里所说的通过Transform组件来移动物体,指的是直接操作Transform来控制物体的位置(position)。 2.1 Transform.Translate 该方法可以将物体从当前位置,移动到指定位置,并且可以选择参照的坐标系。 当需要进行坐标系转换时,可以考虑使用该方法以省去转换坐标系的步骤 if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow)) //上移 { transform.Translate(Vector3.up * speed * Time.deltaTime); } if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow)) //下移 { transform.Translate(Vector3.down * speed * Time.deltaTime); } if (Input

Unity 游戏框架:资源管理神器 ResKit

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-26 11:08:16
此篇文章准备了将近两周的时间,写了改,改了删。之前有朋友反馈,上一个文章太冗长了,影响阅读体验,这一讲就走个精简路线。所以只要不是很重要的内容就都删减掉了。 文章分两个部分,第一部分是原理,第二部分是实战。 原理部分,初学者尽量去理解就好,不用跟着敲,列出的代码都是示意代码。 实战部分是留给初学者的,希望敲完代码,这样有助于理解前边的原理。 当然原理不是很难。 第一部分:原理 ResKit 中值得一说的 Feature 如下: 引用计数器 可以不传 BundleName 当然也有很多不值得一提的 Feature。 比如统一的加载 API,一个 ResLaoder.LoadSync API 可以加载 Resources/AssetBundle/PersistentDataPath/StreamingAssets,甚至是网络资源。这个很多开源方案都有实现。 Simulation Mode,这个功能最早源自于 Unity 官方推出的 AssetBundleManager,不过不维护了,被 AssetBundleBrowser 替代了。但是这个功能真的很方便就加入到 ResKit 里了。 对象池,是管理内存的一种手段,在 ResKit 中作用不是很大,但是是一个非常值得学习的优化工具,所以也列到本次 chat 里了。 接下来就按着以上顺序聊聊这些 Feature。 首先先看下 ResKit