触发器和碰撞器的区别:碰撞器与物体时可以发生碰撞的,但是不可以穿过;触发器时可以穿过的,是可以进入到内部的,对移动没有影响
触发器和碰撞器的区别:碰撞器与物体时可以发生碰撞的,但是不可以穿过;触发器时可以穿过的,是可以进入到内部的,对移动没有影响
terrain地形
brush size设置笔刷大小
opacity设置笔刷速度
设置地形参数,状态栏会黄色感叹号处理,可以在window----lighting------settings------取消auto generate自动生成光照贴图,每次都会就会降低性能
地形系统
ctrl+n 创建新工程
Prefab预制体,同时控制多个物体
f键聚焦,alt+鼠标左键围绕物体观察
这一节特别重要
scene窗口视野控制
1、视野平移 鼠标中键
2、操作某个物品 聚焦 双击 or F键
3、围绕物品管侧 alt+鼠标左键 也可放缩小
4、飞行模式 漫游场景
针对视野
鼠标右键+E 上方
鼠标右键+Q 下方
鼠标右键+W 前进
鼠标右键+S 后退
鼠标右键+A 左变
鼠标右键+D 右边
5、persp透视视野
近大远小 生活中的
6、正交 视野 iso 所有都是平行 全部一样大
锥形体相机 默认 相机 默认 可切换
perspecton(锥形体)
orthegraphic(长方体)
7、可直接点击轴去观察。 也可以点轴组成的面来观看和移动它
8、2个物品要挨着要调整各个维度的位置。
v工具,吸附顶点
右侧Layers选项卡下是图层操作
EditLayers...可以进入层设置
EditLayers内的Layers选项卡下可以新增层信息
Maximize On Play = 测试时最大化游戏窗口
面板属性中Maximize = 最大化当前面板
F键 = 镜头聚焦当前选中物体
ALT+鼠标左击 = 围绕选中物体进行3D观察
Scene窗口下鼠标右击进入观察模式,WASD控制移动方向
右侧坐标系下方设置视角样式
PERSP = 透视视野
ISO = 真交视野
ctrl键 = 对齐移动
edit内有一个snap settings选项卡,可以设置对齐移动的步长。有X/Y/Z三个轴
Scale = 设置缩放步长
Rotation = 设置旋转步长
顶点吸附
快捷键 = V
ZeroBasicLerning 项目总结
这个项目主要还是以模仿为主,对于初学者来说项目里的内容还挺多的,有光源系统、粒子系统、地形系统、光照烘焙、导航系统,动画系统这些,虽然是比较基础的但应该是一个游戏里最核心的系统了。整个项目跟着写下来,Unity的开发有了更深的理解,从界面、脚本都看不懂到界面选项大概都知道是什么功能,脚本基本掌握了镜头跟随的写法,以及了解了脚本控制人物导航移动的原理。其中不乏也有让人挠破头的例子,比如各个物体的网格突然不见了,不知道按到什么,地形笔刷失效等等。粒子系统贴图也是此次项目所花费时间最多的地方了,由于版本不一样,很多操作的界面也有所不同,但还是通过查Unity手册自己摸索解决了,虽然所花费的时间比较多但还是挺涨熟练度的。
OnCollisionEnter(Collision collision):碰撞瞬间调用一次
OnCollisionExit():碰撞结束调用一次
OnCollisionStay():碰撞期间持续调用
地形建立
Terrain
属性:width,length,height控制地形升高的最大高度
Brushes 笔刷形状,可以形成不同形状的地形
opacity 升高地形的快慢
取消window->Auto generate 避免绘制地形时不断对光影进行处理
导航系统
导航网格烘培 勾选所有hierarchy中的Static
window->Navigation
agent radius 扩大可行范围
穿过草等隐蔽物体,在该物体的inspector中取消static ->navigation static->重新烘培(bake)
不需要生成导航网格的部分(如石头)
把Object中的Navigation Area 设定为 Not walkable->重新烘培
Nav Mash Agent
obstacle Avoidance需要和人物的大小保持一致
cude 方体
sphere 球体
Capsule 胶囊体
Cylinder 圆柱体
plane 地面
quad 面片
ragdoll 布娃娃系统
terrain 地形
tree 树
wind zone 风区
3D text 3D文字
模型 mesh 形状
贴图 外光
材质
人物控制(点击屏幕移动角色)
using UnityEngine;
using System.Collections;
public class Test : MonoBehaviour {
//公开NavMeshAgent组件设为变量(可变组件方式)
public NavMeshAgent agent;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
//检查鼠标左键是否按下(0代表左键)
if (Input.GetMouseButtonDown(0)){
//设定射线变量,赋予以摄像机发射射线获取的鼠标当前位置坐标
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
//设定光线投射碰撞变量
RaycastHit hit;
//检查光线投射是否有碰撞点(射线的起点ray,碰撞点)
if (Physics.Raycast(ray,out hit)){
//调用NavMeshAgent目标点功能
agent.SetDestination(hit.point);
}
}
}
}
当使用到Camera.main的时候,unity会寻找场景中Tag是MainCamera的对象,所以在使用之前必须先将一个摄像机的Tag设置为MainCamera,不然会报错。
NullReferenceException: Object reference not set to an instance of an object
Move.Update () (at Assets/Scripts/Move.cs:17)
ctrl
尝试在寻路过程中加入跳跃,结果发现无论如何设置高度都无法使英雄hero的y轴升高,原因是因为nav mesh agent锁定了y轴高度在nav mesh烘焙面,导致无法跳跃
按住ctrl移动,每次一米
edit snapsetting 改变每次ctrl后的默认移动、旋转大小。
V工具:坐标轴当前游戏物体,吸附定点