Unity基础补漏(1)_GameObject类_Time类_Transform类_Camera_光面板_物理面板/物理材质_碰撞检测函数_刚体加力
聚焦摄像头
选中摄像头: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
- 旋转 transform.Rotate()
- 相对于自身和世界坐标轴旋转
(重载,相对于轴,常用这种)
- 相对于点旋转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 );//不受到缩放影响(受影响InverseTransformVector)
//方向
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代码
静态成员
- 获取摄像机
之前脚本获取的前提是摄像机tag是maincamera
摄像机数量:
Camera.allCameraCount;
- 得到所有摄像机
渲染相关委托(暂时不用)
重要成员
界面上所有参数都可获得,比如:
世界坐标转屏幕坐标(比较重要,可以做头顶血条等):
Vector3 v = Camera.main.WordToScreenPoint(this.transform.position),得到的z是摄像机和物体的距离屏幕坐标转世界坐标(ScreenToWorldPoint)(需要设置个z轴,不然转换的坐标一直在摄像机位置):
光源组件
- 光源类型
- Intensity光源亮度
- shadow type:
- Cookie投影遮罩
- Draw Halo(光晕效果)
- flar耀斑(摄像机需要加Flare Layer组件才看得到)
- Culling Mask:剔除遮罩层,决定哪些层级受到光源影响
- Indirect Multiplier:
- RealtimeShadows(需要配合其他知识,暂时用不上)
- Render Moder(了解):渲染模式
- 点问号看官方详细说明
光面板
- 天空盒,材质制作天空盒
- OtherSetting
物理面板
- 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();
}
结尾
不要好高骛远
不要心浮气躁
不要急于求成
积少成多,慢慢积累
Unity基础补漏(1)_GameObject类_Time类_Transform类_Camera_光面板_物理面板/物理材质_碰撞检测函数_刚体加力相关推荐
- Unity 游戏框架搭建 (七) 减少加班利器-QApp类
本来这周想介绍一些框架中自认为比较好用的小工具的,但是发现很多小工具都依赖一个类----App. App类的职责: 1.接收Unity的生命周期事件. 2.做为游戏的入口. 3.一些框架级别的组件初始 ...
- 2.在某应用软件中需要记录业务方法的调用日志,在不修改现有业务类的基础上为每一个类提供一个日志记录代理类,在代理类中输出日志,例如在业务方法 method() 调用之前输出“方法 method() 被
2.在某应用软件中需要记录业务方法的调用日志,在不修改现有业务类的基础上为每一个类提供一个日志记录代理类,在代理类中输出日志,例如在业务方法 method() 调用之前输出"方法 metho ...
- 列表怎么有限的初始化为零_《零基础学习Android开发》第五课 类与面向对象编程1-1...
视频:<零基础学习Android开发>第五课 类与面向对象编程1-1 类的定义.成员变量.构造方法.成员方法 一.从数据与逻辑相互关系审视代码 通过前面的课程,我们不断接触Java语言的知 ...
- java 的对象类用_java基础(第零篇)对象与类
前言: 本文讲述java中对象与类的一些概念.包括对象与类的有关概念,类间五种关系,类的访问权限等. 在java中,一切都可以用对象来描述,操作对象的标识符只不过是对象的一个引用,一个对象可以有多个引 ...
- java类继承语法_java类的继承(基础)
---恢复内容开始--- 这篇随笔和大家讲讲java中类的继承是什么?希望对你们有所帮助. 目录 一.java继承是什么? 二.为什么使用java继承 三.java继承的实现 1.1 java继承的 ...
- java 中间容器 表格_【JAVA SE基础篇】45.迭代器、Collections工具类以及使用容器存储表格...
本文将要为您介绍的是[JAVA SE基础篇]45.迭代器.Collections工具类以及使用容器存储表格,具体完成步骤: 1.迭代器 迭代器为我们提供了统一遍历容器(List/Map/Set)的方式 ...
- 【unity 保卫星城】--- 开发笔记03(飞机类第一版)
[unity 保卫星城]--- 开发笔记 六.完善类图中的类的功能 2.飞机的类 六.完善类图中的类的功能 2.飞机的类 先放到这后面再慢慢完善~ using System.Collections; ...
- JavaWeb开发基础:连接数据库的demo和数据库连接工具类DB.java
JavaWeb开发基础:连接数据库的demo和数据库连接工具类DB.java import javax.servlet.*; import javax.servlet.http.*; import j ...
- Java基础之面向对象的概念 继承---组合----枚举类
Java基础之面向对象的概念 继承---组合----枚举类 本章作为面向对象概念的最后一篇,但是作为一名java程序员在面向对象的这条路上还很长. 一.继承与组合简介 继承是实现类重用的重要手段,但是 ...
- python定义一个dog类 类属性有名字_python 基础 12 初识类,类方法,类属性
python 基础 12 初识类,类方法,类属性 # 面向过程 : 想要一个结果 写代码 实现计算结果 # 面向对象开发 : 有哪些角色 角色的属性和技能 两个角色之间是如何交互的 # 复杂的 拥有开 ...
最新文章
- 想回家吗?先用腾讯刚上线的这个功能查一查!
- 新站上线后应该做哪些有利于seo的工作
- 使用JDBC连接SQL Server数据库
- linux中/etc/passwd文件与/etc/shadow文件解析
- 变动翻屏展示图片效果
- 网络安全相关行业必备网站
- Serial Interface之I2C:关于DS1624 2线通信SDA保持时间的说明
- Javascript之把网页加入收藏夹功能
- windos读写ext3工具_Win7下读写Ext2/Ext3/Ext4文件系统
- Fluent动网格知识汇总
- ajax 与ssh结合,基于AJAX和SSH集成框架的国有资产管理系统
- 传奇手游漏洞获取gm权限_传奇私服漏洞获取gm权限
- 【Rust 日报】2021-10-14 Rust是一种让你首先得到宿醉的语言
- 怎么查询dns服务器地址自动获取,如何查看DNS服务器地址以及IP地址
- 机器学习实战之信用卡欺诈案列
- 解决:unable to find valid certification path to requested target
- python 正则表达式爬图片_利用python正则表达式爬取图片
- 增减幅度计算机公式,增长率怎么算公式(基数为0的增长率)
- 易语言安卓模拟器adb模块制作认识adb
- 第十四章 涅焚心经的强大之处