unity游戏之古迹探险
2018-02-20 23:48
344 查看
目录:
1.一个工程的基本结构:必包含三个文件夹Assets(资源目录比如声音、图形) Library(库,开发中生成的中途文件) ProjectSettings(”设置”)
2.导入资源、Prefab预制体
关于预制体:把club从scene视图下拉到project,此后改变Prefab即可改变全部。点击学习:怎样使改变Prefab不影响它的全部子3.地形设计
新建Terrain,工具栏如下有123个模块。以下重点介绍2.Terrain:
最上方一排七个地形建造工具,选中第一个:做山坡 鼠标直接点击是增高,按住shift降低地形。
Settings:控制山坡的陡缓等形状。
选中第二个:对比与第一个的功能按钮区别发现第一行英文说明这个只能升高山 而不能降低,此外在Settings中多出来了一个Height:控制山坡的高度。(在此提一下上一个功能按键所绘的山高是由新建地形时填写的总高确定)
而跟在后面的“Flatten”控制粉刷到某一海平高度。
选中第三个:用来平滑地形边缘/尖锐部分
第四个:贴图,新建第一个贴图会粉刷掉整个地形,后续贴图需手动粉刷区域。通过调节Settings控制美观(插入是否生硬、是否应平滑..)
4.刚体和碰撞检测机制
以创建一个刚体Cube(?)为例,右侧:解释:
1.物体质量(比如1kg的球和100kg的球砸下来的感觉肯定是不同的)
2.下落阻力
3.转动阻力
4.是否使用重力加速度(取消选择,那么物体在空中将不会下落)
5.锁定运动中的x/y/z轴
6.锁定转动中的x/y/z轴
关于Add ->Collider:有很多种,其中
Box Collider盒子碰撞器和Sphere Collider球体碰撞器以及Capsule Collider胶囊体是比较节约性能的,平时尽量选用这三种。最耗费性能的是Add->Physics->Mesh Collider,尽量避免。
获得两个物体能够发生碰撞的条件:
至少两者都有碰撞器(Collider)并且其中一者有正常刚体(Rigidbody)(详细条件参考:unity官方文档)
碰撞信息取得:
函数//创建一个新方法 private void OnCollisionEnter(Collision collision){ print(collision.collider)//获取主角是和哪个碰撞体发生了碰撞 }
触发检测
什么是触发器?创建一个Box Collider,取消勾选 is Trigger,则碰撞器变成了触发器(区别:是只可以碰撞or可以穿越)
移除Mesh Renderer控件,使触发器变成透明区(它多不需要实体显示
触发检测函数: OnTriggerEnter,OnTriggerExit,OnTriggerStay
5.unity中的四种灯光
[原]Unity3D深入浅出 - 光源组件(Light) https://www.cnblogs.com/tonge/p/3899981.html关于:创建的点光源为什么不亮。。。位置。。还是空间位置。。
6.创建动画:火焰火堆
其实就是点光源放在灯柱上,改变光线颜色+粒子系统粒子系统
1.右键创建Effects–Particle…..2.火焰碎片素材导入
3.调整
4.创建动画(火光闪烁
lightmapping 光照贴图,做光照烘焙
用途:节约性能,把提前计算好的光照动画保存下,不再即时计算。在应用之前,灯光原本是这样的:(所谓即时计算)
以下光照烘焙:
不知道为什么我做的没效果 - - 成功案例比如在山谷内烘焙之后取消显示Light,山谷已经自带灯光。
7.导航系统
1.烘焙网格window–Animation创建
8.角色人物
1.通过NavMeshAgent使人物根据导航系统而移动选中人物文件-右侧Add Component–创建Nav Mesh Agent,
解释:
Angular Speed:人物转向速度
框选:手动调整,使控件大小与人物尽量贴合。
9.控制摄像机的跟随,角色的动画播放
1.摄像机:手动调整2.动画播放:
Project中右键创建一个Animator Controller(动画状态机),重命名为HeroController用来控制人物的动画。选中Hero,在右侧栏看到组件Animator–Controller。把状态机拖进去。
那么如何修改状态机呢?
选中Hero 选择Animator,直接把动画素材拖入状态转换界面(下图右侧),在图中左侧新建变量float-speed(速度)
建立动画间转换关系。
解释:
取消勾选 意为动画可以随时发生
从idle–walk:当speed>0
从walk–idle:当speed<0.1
walk–run同理
这里采取由“速度变化”进行状态转换。自然要用到Animotar组件,在Hero脚本中调用该组件
public Animator anim; //调用 anim.SetFloat("speed", agent.velocity.magnitude); //通过Animator组件获取速度,magnitude速度大小
返回主面板,把该组件直接鼠标拖入脚本的变量初始值。
相关文章推荐
- 零基础入门Unity - 古迹探险
- Unity 4.3 制作一个2D横版射击游戏(2)
- unity游戏之刀塔传奇山寨版:斥资千万推海外电视广告
- Unity游戏安卓和苹果游戏中植入广告增加收入
- 【小松教你手游开发】【unity实用技能】unity游戏移植到WindowsPhone8平台上的一些
- unity游戏录屏---shareREC
- [Unity 游戏设计的元素]
- (转)Unity 和 Cocos2d-x 越渐流行,国内公司开发「自研游戏引擎」的意义何在?
- unity游戏优化之ETC压缩和 Alpha通道处理
- unity单机ARPG游戏求伙伴····
- unity基础开发----unity游戏速度更快的简易检查表
- [精华分享][Unity&模型制作&blender]适合独立游戏开发的官方免费3D人物模型软件以及教程合集
- 总结使用Unity 3D优化游戏运行性能的经验
- Unity多玩家网络游戏开发教程1章Unity带有网络功能
- Unity游戏开发图片纹理压缩方案
- unity游戏开发之防空防灾游戏来了 防雾霾的游戏还会远么
- 关于Unity的入门游戏飞机大战的开发(上)
- Unity 暂停游戏
- Unity客户端框架笔记(状态模式和策略模式在游戏中的应用)转
- Unity 游戏存档 PlayerPrefs类的用法