当前位置:   article > 正文

Unity基础补漏(1)_GameObject类_Time类_Transform类_Camera_光面板_物理面板/物理材质_碰撞检测函数_刚体加力_camera.main.gameobject.transform.forward

camera.main.gameobject.transform.forward
聚焦摄像头

选中摄像头: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 = “我的方块”;
  • 1
  • 2
查找单个物体

在这里插入图片描述

查找多个物体(标签查找)

返回数组在这里插入图片描述

删除对象

不会立马删除,在下一帧删除。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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  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. 在这里插入图片描述
    在这里插入图片描述
  2. 二 渲染层级()在这里插入图片描述

在这里插入图片描述
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();
}

结尾

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

积少成多,慢慢积累

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/93287
推荐阅读
相关标签
  

闽ICP备14008679号