聚焦摄像头
选中摄像头:ctlr+shift+f
方便的导入资源包
- 直接面板操作
MonoBehavior一些注意事项
- 第2点,有专门方法创建,不能如:Text a = new Text();
- 第4点,如果不想让一个物体再挂脚本,可以添加[DisallowMutipleCompnent]
- 不继承Mono的类:
- 另外,没有继承Mono的脚本打印时候只能用Debug.Log()而不能print
继承了的可以print。
脚本 的先后顺序控制
生命周期函数
- 出生,激活,开始,update,lateupdate,失活,销毁
私有的与保护的也可以被面板显示出来
共有的不让显示
让自己定义的类型显示出来
- head,tooltip
- range,在面板设置手动的滑动条
- 多行显示 和 带滚动条的多行显示
- 在面板用方法重置变量
GameObject静态方法
获取脚本(组件)
- thisGetComponent(" ");
需要转化 - 泛型方法
- 设置true可以找到失活对象的脚本,比较有用
创建物体
GameObject obj = GameObject.GreatPrimitive(PrimitiveType.Cube);
obj.name = “我的方块”;
查找单个物体
查找多个物体(标签查找)
返回数组
删除对象
不会立马删除,在下一帧删除。DestroyImmediate是立马删除,一般不用,避免卡顿。
过场景不移除
GameObject.DontDestroyOnLoad()
动态创建对象Instantiate,删除destroy
- myObj可以是预制体,一般用预制体
-Destroy可以删除游戏对象,也可以脚本。Dstroy()第二个参数可以延迟消除。下一帧才会删除。 - 过场景时候,场景的物体会被删除,如果需要过场景不被移除DontDestroyOnLoad(对象),一般传gameObject对象
GameObject成员变量
成员变量
GameObject成员方法
- 创建物体(名字,顺便上脚本)
- 给对象添加脚本
一般用泛型加 这种相对比较少 泛型可以直接得到添加的脚本 - 标签比较(字符串两种比较)
- 设置失活
- 其他不推荐
- 通知自己执行(自己的所有脚本找这个方法)
还可以带参数
Time类
1.时间缩放比例
2.帧间隔时间(常用来算位移)
-
受scale影响的 -
不受scale影响的
3.游戏开始到现在时间(常在单机里)
受和不受scale影响的
4.物理帧间隔时间
受和不受
5.游戏开始到现在跑了多少帧
transform类
1.Vector3
Vector3 v = new Vector3(0,0,0); //算是unity的结构体
- 常用点(规定z轴是前方)
- 计算两个点距离
Vector3.Distance( v1, v2 );
2. position
- position得到的是相对于世界坐标系,不一定和面板的一致
- localPosition面板上的位置(相对父物体)
-
不能直接复制改变position的xyz值
3.位移(方向 * 时间 * 速度)
Vector3.forward:世界坐标的前方 transform.forward:自身坐标的前方
1.公式自己算 2.API算 (还是能理解,坐标和第二个参数叠加) 自身坐标动,一般用这个
4.角度和旋转
- 面板上的角度值(欧拉角) transform.eulerAngles
四元数: transform.rotation
- 世界和相对父对象的值
- 修改值,用Vector3
- 相对于自身和世界坐标轴旋转
(重载,相对于轴,常用这种) - 相对于点旋转RotateAround
参一:相对点;参二:绕哪轴
5.缩放和看向
- 相对世界和本地的缩放,改只能改本地的,世界的只能获取
- 变大变小(vector3.one)
- 看向:让物体的面向一直看向一个点、对象
6.获取/设置父对象
- 获得
this.transform.parent
- 断绝
this.transform.parent = null;
- 认
//赋值设置 this.transform.parent = 某个对象; //API设置 this.transform.SetParent(null);
- SetParent有重载,第二个参数true/false,是否保留原来的世界坐标和缩放(比较重要)
7.断绝后代关系
抛弃所有儿子 this.transform.DetachChildren();
8.找子对象
- 名字查找(只能找儿子,孙子不可以)
this.transform.Find(“Cube 1”); //能找到失活对象,GameObject查找方法不可以
- 遍历儿子
- this.transform.childCount //儿子数量
- 索引获得儿子:this.transform.GetChild(0);
9.儿子操作
- 判断自己的爸爸
this.transform.IsChildOf(对象);
- 得到自己作为儿子的编号
this.transform.GetSiblingIndex();
- 设置自己作为儿子的顺序
//第一个 this.transform.SetAsFirstSibling(); //最后一个 this.transform.SetAsLastSibling(); //指定位置,如果超过个数则放到最后一个,负数还是最后一个 this.transform.SetSiblingIndex(num);
10. 坐标转换
- 世界坐标转换到本地相对坐标(点,方向)
this.transform.InverseTransformPoint( Vector3.forward );
this.transform.InverseTransformDirection( Vector3.forward );
- 本地坐标转换到世界对坐标(点,方向)
- 本地 转 世界 点(受缩放影响)(重要):TransformPoint
- 本地 转 世界 方向(不受缩放影响):TranformDirection
TransformVector //受缩放影响
Input和Screen
鼠标输入
- unity屏幕原点在左下角,
- 鼠标位置:Input.mousePosition;
- 鼠标按下:Input.GetButtonDown(num);
- num: 0 左键, 1 右键, 2 中键
- 鼠标抬起,长按:GetButtonUp,GetButton();
- 鼠标中键滚动:Input.mouseScrollDelta; //返回值y -1下, 1上
键盘输入
KeyCode式 字符式(一般少用)(有坑要小写)
检测默认值输入
Horizontal Vertical
- Input.GetAxis(" "); //返回值-1 1之间渐变
- 不仅得到键盘输入,还可以鼠标移动
- Input.GetAxisRaw(" "); //返回值-1 0 1无渐变
其他输入检测(了解)
- 任意键输入(1和2可以配合修改键位):anyKey
- 显示输入的值:inputString
- 得到手柄按钮的所有按钮名字
- 移动设备触摸相关(一般用UI来,现在很少用这方法)
- 是否启用多点触控:multiTouchEnabled
- 陀螺仪
Screem相关(较少)
- 当前屏幕分辨率(显示器)
- game窗口宽高
- 屏幕休眠模式(永不,跟随系统)
- 运行是否全屏,窗口模式(一般不用,因为发布可以在界面设置)
- 移动屏幕转向 (较少)
- 指定屏幕显示方向(较少)
- 设置分辨率(设置分辨率移动设备一般不用)
Camera参数
- 一
- 二 渲染层级()
3. 透视,正交 4. Near
5. 渲染顺序深度(多个摄像机,层级大的能被看到,数值越小越先渲染)
多个摄像机,叠加显示,配合这个使用,深度较高设置下图(比较重要) 6. 渲染纹理
7. 是否启用剔除遮挡(提升性能)
8. 视口范围(主机游戏分屏幕多人游戏)
Camera代码
静态成员
- 获取摄像机
Camera.allCameraCount;
- 得到所有摄像机
渲染相关委托(暂时不用)
重要成员
光源组件
- 光源类型
- Intensity光源亮度
- shadow type:
- Cookie投影遮罩
- Draw Halo(光晕效果)
- flar耀斑(摄像机需要加Flare Layer组件才看得到)
- Culling Mask:剔除遮罩层,决定哪些层级受到光源影响
- Indirect Multiplier:
- RealtimeShadows(需要配合其他知识,暂时用不上)
- Render Moder(了解):渲染模式
- 点问号看官方详细说明
光面板
物理面板
- Interpolate插值运算,刚体运动更平滑,与FixedUpdate更新世界相关
- Collison Detection 碰撞检测模式(重要)
性能消耗大小: 碰对碰的检测搭配 - 网格碰撞体加了刚体后需要勾选这个才会产生力的作用
物理材质
- Dynamic/Static Fiction 动/静摩擦
- Bounciness 表面弹性,1就不会有能量损失
碰撞检测函数(在FixdUpdate和Update之间)
碰撞的三种状态:碰到,结束,一直接触(要摩擦时候) collision可以得到物体物体的对象、坐标、碰撞点的信息 而触发器出入的是collider 注意:如果异形物体,刚体在父对象上,通过子对象挂载脚本检测碰撞行不通,必须挂在父对象上。
可以把碰撞、出发器函数写出虚函数在子类里面重写逻辑。
刚体加力
- 相对世界坐标添加力(重载可以指定物体某个位置加力)
RigiBody rigiBody = 获得刚体组件; rigiBody.AddForce(Vector3.forward * 10); //瞬时的力 //也可以在这里实现以自身坐标动,用this.transform.forward
- 相对本地坐标添加力
rigiBody,AddRelativeForce(Vector3.forward * 10)
- 扭矩力
//世界坐标 rigiBody.AddTorque( Vector3.up * 10 ); //自身坐标 rigiBodyAddRelativeTorque( Vector3.up * 10 );
- 改速度(一般改变力来改变速度)
- 模拟爆炸效果
//不会影响全局,只会影响调用了这方法脚本物体 rigiBody.AddExplosionForce(力的大小,保证中心,爆炸半径)
- 力的模式(加力函数的第二次个参数)
-
Acceleration -
Force(最符合真实) -
Impulse -
VelorcityChange(忽略质量时间)
- 力场(方便物体一 直动)
- 刚体休眠(有的时候出现奇怪的物理现象)
//Unity为了节省性能自动休眠 //放Update里面 if( rigiBody.IsSleeping() ) { rigiBody.WakeUp(); }
结尾
不要好高骛远 不要心浮气躁 不要急于求成
积少成多,慢慢积累
|