聚焦摄像头

选中摄像头: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成员方法

  1. 创建物体(名字,顺便上脚本)
  2. 给对象添加脚本
    一般用泛型加

    这种相对比较少
    泛型可以直接得到添加的脚本
  3. 标签比较(字符串两种比较)
  4. 设置失活
  5. 其他不推荐
  • 通知自己执行(自己的所有脚本找这个方法)

    还可以带参数

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
  1. 世界和相对父对象的值
  2. 修改值,用Vector3
  • 旋转 transform.Rotate()
  1. 相对于自身和世界坐标轴旋转

    (重载,相对于轴,常用这种)
  2. 相对于点旋转RotateAround
    参一:相对点;参二:绕哪轴
5.缩放和看向
  1. 相对世界和本地的缩放,改只能改本地的,世界的只能获取
  • 变大变小(vector3.one)
  1. 看向:让物体的面向一直看向一个点、对象
6.获取/设置父对象
  1. 获得

this.transform.parent

  1. 断绝

this.transform.parent = null;

//赋值设置
this.transform.parent = 某个对象;
//API设置
this.transform.SetParent(null);

  • SetParent有重载,第二个参数true/false,是否保留原来的世界坐标和缩放(比较重要)
7.断绝后代关系

抛弃所有儿子
this.transform.DetachChildren();

8.找子对象
  1. 名字查找(只能找儿子,孙子不可以)

this.transform.Find(“Cube 1”);
//能找到失活对象,GameObject查找方法不可以

  1. 遍历儿子
  • this.transform.childCount //儿子数量
  • 索引获得儿子:this.transform.GetChild(0);
9.儿子操作
  1. 判断自己的爸爸

this.transform.IsChildOf(对象);

  1. 得到自己作为儿子的编号

this.transform.GetSiblingIndex();

  1. 设置自己作为儿子的顺序

//第一个
this.transform.SetAsFirstSibling();
//最后一个
this.transform.SetAsLastSibling();
//指定位置,如果超过个数则放到最后一个,负数还是最后一个
this.transform.SetSiblingIndex(num);

10. 坐标转换
  1. 世界坐标转换到本地相对坐标(点,方向)
//受到缩放影响
//点
this.transform.InverseTransformPoint( Vector3.forward );//不受到缩放影响(受影响InverseTransformVector)
//方向
this.transform.InverseTransformDirection( Vector3.forward );
  1. 本地坐标转换到世界对坐标(点,方向)
  • 本地 转 世界 点(受缩放影响)(重要):TransformPoint
  • 本地 转 世界 方向(不受缩放影响):TranformDirection
    TransformVector //受缩放影响

Input和Screen

鼠标输入
  1. unity屏幕原点在左下角,
  2. 鼠标位置:Input.mousePosition;
  3. 鼠标按下:Input.GetButtonDown(num);
  4. num: 0 左键, 1 右键, 2 中键
  5. 鼠标抬起,长按:GetButtonUp,GetButton();
  6. 鼠标中键滚动:Input.mouseScrollDelta; //返回值y -1下, 1上
键盘输入

KeyCode式

字符式(一般少用)(有坑要小写)

检测默认值输入

Horizontal
Vertical

  1. Input.GetAxis(" "); //返回值-1 1之间渐变
  • 不仅得到键盘输入,还可以鼠标移动
  1. Input.GetAxisRaw(" "); //返回值-1 0 1无渐变

其他输入检测(了解)
  1. 任意键输入(1和2可以配合修改键位):anyKey
  2. 显示输入的值:inputString
  3. 得到手柄按钮的所有按钮名字
  4. 移动设备触摸相关(一般用UI来,现在很少用这方法)
  5. 是否启用多点触控:multiTouchEnabled
  6. 陀螺仪



Screem相关(较少)
  • 静态属性
  1. 当前屏幕分辨率(显示器)
  2. game窗口宽高
  3. 屏幕休眠模式(永不,跟随系统)
  4. 运行是否全屏,窗口模式(一般不用,因为发布可以在界面设置)
  5. 移动屏幕转向 (较少)
  6. 指定屏幕显示方向(较少)
  • 静态方法
  1. 设置分辨率(设置分辨率移动设备一般不用)

Camera参数


  1. 二 渲染层级()


3. 透视,正交


4. Near


5. 渲染顺序深度(多个摄像机,层级大的能被看到,数值越小越先渲染)


多个摄像机,叠加显示,配合这个使用,深度较高设置下图(比较重要)

6. 渲染纹理



7. 是否启用剔除遮挡(提升性能)


8. 视口范围(主机游戏分屏幕多人游戏)

Camera代码

静态成员
  1. 获取摄像机
  • 之前脚本获取的前提是摄像机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



注意:如果异形物体,刚体在父对象上,通过子对象挂载脚本检测碰撞行不通,必须挂在父对象上。

可以把碰撞、出发器函数写出虚函数在子类里面重写逻辑。

刚体加力

  1. 相对世界坐标添加力(重载可以指定物体某个位置加力)

RigiBody rigiBody = 获得刚体组件;
rigiBody.AddForce(Vector3.forward * 10);
//瞬时的力
//也可以在这里实现以自身坐标动,用this.transform.forward

  1. 相对本地坐标添加力

rigiBody,AddRelativeForce(Vector3.forward * 10)

  1. 扭矩力

//世界坐标
rigiBody.AddTorque( Vector3.up * 10 );
//自身坐标
rigiBodyAddRelativeTorque( Vector3.up * 10 );

  1. 改速度(一般改变力来改变速度)

  1. 模拟爆炸效果

//不会影响全局,只会影响调用了这方法脚本物体
rigiBody.AddExplosionForce(力的大小,保证中心,爆炸半径)

  1. 力的模式(加力函数的第二次个参数)
  • Acceleration

  • Force(最符合真实)

  • Impulse

  • VelorcityChange(忽略质量时间)

  1. 力场(方便物体一 直动)
  2. 刚体休眠(有的时候出现奇怪的物理现象)

//Unity为了节省性能自动休眠
//放Update里面
if( rigiBody.IsSleeping() )
{
rigiBody.WakeUp();
}

结尾

不要好高骛远
不要心浮气躁
不要急于求成

积少成多,慢慢积累

Unity基础补漏(1)_GameObject类_Time类_Transform类_Camera_光面板_物理面板/物理材质_碰撞检测函数_刚体加力相关推荐

  1. Unity 游戏框架搭建 (七) 减少加班利器-QApp类

    本来这周想介绍一些框架中自认为比较好用的小工具的,但是发现很多小工具都依赖一个类----App. App类的职责: 1.接收Unity的生命周期事件. 2.做为游戏的入口. 3.一些框架级别的组件初始 ...

  2. 2.在某应用软件中需要记录业务方法的调用日志,在不修改现有业务类的基础上为每一个类提供一个日志记录代理类,在代理类中输出日志,例如在业务方法 method() 调用之前输出“方法 method() 被

    2.在某应用软件中需要记录业务方法的调用日志,在不修改现有业务类的基础上为每一个类提供一个日志记录代理类,在代理类中输出日志,例如在业务方法 method() 调用之前输出"方法 metho ...

  3. 列表怎么有限的初始化为零_《零基础学习Android开发》第五课 类与面向对象编程1-1...

    视频:<零基础学习Android开发>第五课 类与面向对象编程1-1 类的定义.成员变量.构造方法.成员方法 一.从数据与逻辑相互关系审视代码 通过前面的课程,我们不断接触Java语言的知 ...

  4. java 的对象类用_java基础(第零篇)对象与类

    前言: 本文讲述java中对象与类的一些概念.包括对象与类的有关概念,类间五种关系,类的访问权限等. 在java中,一切都可以用对象来描述,操作对象的标识符只不过是对象的一个引用,一个对象可以有多个引 ...

  5. java类继承语法_java类的继承(基础)

    ---恢复内容开始--- 这篇随笔和大家讲讲java中类的继承是什么?希望对你们有所帮助. 目录 一.java继承是什么? 二.为什么使用java继承 三.java继承的实现 1.1  java继承的 ...

  6. java 中间容器 表格_【JAVA SE基础篇】45.迭代器、Collections工具类以及使用容器存储表格...

    本文将要为您介绍的是[JAVA SE基础篇]45.迭代器.Collections工具类以及使用容器存储表格,具体完成步骤: 1.迭代器 迭代器为我们提供了统一遍历容器(List/Map/Set)的方式 ...

  7. 【unity 保卫星城】--- 开发笔记03(飞机类第一版)

    [unity 保卫星城]--- 开发笔记 六.完善类图中的类的功能 2.飞机的类 六.完善类图中的类的功能 2.飞机的类 先放到这后面再慢慢完善~ using System.Collections; ...

  8. JavaWeb开发基础:连接数据库的demo和数据库连接工具类DB.java

    JavaWeb开发基础:连接数据库的demo和数据库连接工具类DB.java import javax.servlet.*; import javax.servlet.http.*; import j ...

  9. Java基础之面向对象的概念 继承---组合----枚举类

    Java基础之面向对象的概念 继承---组合----枚举类 本章作为面向对象概念的最后一篇,但是作为一名java程序员在面向对象的这条路上还很长. 一.继承与组合简介 继承是实现类重用的重要手段,但是 ...

  10. python定义一个dog类 类属性有名字_python 基础 12 初识类,类方法,类属性

    python 基础 12 初识类,类方法,类属性 # 面向过程 : 想要一个结果 写代码 实现计算结果 # 面向对象开发 : 有哪些角色 角色的属性和技能 两个角色之间是如何交互的 # 复杂的 拥有开 ...

最新文章

  1. 想回家吗?先用腾讯刚上线的这个功能查一查!
  2. 新站上线后应该做哪些有利于seo的工作
  3. 使用JDBC连接SQL Server数据库
  4. linux中/etc/passwd文件与/etc/shadow文件解析
  5. 变动翻屏展示图片效果
  6. 网络安全相关行业必备网站
  7. Serial Interface之I2C:关于DS1624 2线通信SDA保持时间的说明
  8. Javascript之把网页加入收藏夹功能
  9. windos读写ext3工具_Win7下读写Ext2/Ext3/Ext4文件系统
  10. Fluent动网格知识汇总
  11. ajax 与ssh结合,基于AJAX和SSH集成框架的国有资产管理系统
  12. 传奇手游漏洞获取gm权限_传奇私服漏洞获取gm权限
  13. 【Rust 日报】2021-10-14 Rust是一种让你首先得到宿醉的语言
  14. 怎么查询dns服务器地址自动获取,如何查看DNS服务器地址以及IP地址
  15. 机器学习实战之信用卡欺诈案列
  16. 解决:unable to find valid certification path to requested target
  17. python 正则表达式爬图片_利用python正则表达式爬取图片
  18. 增减幅度计算机公式,增长率怎么算公式(基数为0的增长率)
  19. 易语言安卓模拟器adb模块制作认识adb
  20. 第十四章 涅焚心经的强大之处

热门文章

  1. python中for语法
  2. 系统集成项目管理工程师高频考点(第五章)
  3. cssie兼容性配置
  4. ImageJ的安装与简单使用
  5. java解压zip和rar并解决乱码问题
  6. 那些年,我深爱着的PPT
  7. C51单片机学习笔记——秒表
  8. 利用百度API实现图像识别
  9. 【毕业设计】stm32智能语音识别系统 - 单片机 嵌入式 物联网
  10. IP城域网遇到的总结