栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 游戏开发 > 其他

Unity基础补漏(1)

其他 更新时间:发布时间: 百科书网 趣学号
聚焦摄像头

选中摄像头: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();
}

结尾

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

积少成多,慢慢积累

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/1065686.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号