感觉自己基础太差了 重新学一遍大火
1.MonoBehavior中的重要内容
1.得到自己挂载的单个脚本
2.得到子对象挂载的脚本(也会找自己身上的,和子物体的子物体)
该函数后面的参数 默认是false 意思是如果子对象失活,是不会去找这个对象上是否有某个脚本
如果是true,即使子对象失活 也会找到该脚本
3.得到父物体挂载的脚本(也会找自己身上的,和父物体的父物体)
API:GetComponentInParent<>();
括号里面不用填东西 因为父物体如果失活子物体会跟着失活
4.创建自带的几何体
API:Gameobject.CreatePrimitive(primitiveType.你要创建的物体);
可以声明一个GameObject类型的变量接收
5.查找对象的相关知识
无法找到失活的对象,只能找到激活的。
如果场景中存在多个满足条件的对象,无法准确的找到是谁。
查找单个对象:
根据对象名: GameObject a1 = Gameobject.Find("对象名"); 效率很低
注:Gameobject.find是全场查找 transform.find是查找子物体(找不到孙物体)
根据tag: GameObject a1 = GameObject.FindWithTag("标签名");
GameObject a1 = GameObject.FindGameObjectWithTag("标签名");
查找多个对象:
找多个对象的API只能通过tag去找。
GameObject[] a1 = GameObject.FindGameObjectsWithTag("标签名")
更多的查找方法:
脚本名 变量名=Gameobject.FindObjectOfType<脚本名>();
返回的是一个 脚本类 还要用变量名.gameobject 获取到物体
效率更低
6.实例化对象(克隆对象)的方法
GameObject.Instantiate(),如果继承了MonoBehavior可以直接Instantiate(),
因为此方法是unity里面的Object基类提供的。
7.删除对象的方法
GameObject.Destroy(删除的物体,延迟几秒删除);
Destroy不仅可以删除对象 还可以删除脚本。
注: 此方法不会立刻移除对象,只是给该对象添加了一个移除标识,至少会在下一帧时才把该对象从内存中移除。
有特殊需求,如果要立刻删除
GameObject.DestroyImmediate(删除的物体);
能用上面的就别用下面的
8.过场景不移除
默认情况 在切换场景时,场景中对象都会被自动删除掉。
如果希望某个对象 切换场景不被移除
GameObjcet.DontDestroyOnLoad(this.gameobjcet);
上面的代码的意思是:自己依附的GameObject对象 切换场景时不被删除。
9.创建空物体
GameObject是可以被new出来的。
GameObject 变量名 = new GameObject(); //创建一个空物体
GameObject 变量名 = new GameObject("该物体的名字");//创建一个有名字的空物体
GameObject 变量名 = new GameObject("该物体的名字",typeof(组件名));创建一个挂有什么组件的有名字的物体。
10.为对象添加脚本
继承MonoBehavior的脚本 是不能够去new的
如果想要动态的添加继承MonoBehavior的脚本 在某一对象上
直接使用GameObject的方法即可
AddComponent
用typeof需要 as 转换成该类型
用泛型 可以直接获得到
通过返回值 可以得到加入的脚本信息来进行处理。
11.标签比较
返回值都为bool类
this.gameObject.compareTag("标签名")
this.gameObject.tag == "标签名"
都可以用
12.设置激活失活
gameObject.SetActive(false); 失活
gameObject.SetActive(true); 激活
13.次要方法_了解即可
API: this.gameObject.SendMessage("方法名");
命令自己 去执行这个“函数名”相同的函数 会在自己身上挂载的所有脚本去找。
跟直接调用: 方法名(); 不同。
他会去找到自己身上所有的脚本 有这个名字的函数去执行。
广播行为 会在自己和子物体上挂载的所有脚本去找。
API: this.gameObject.BroadcastMessage("函数名");
向父物体和自己发送消息 并执行
API: this.gameObject.SendMessageUpwards("函数名");
2.时间相关,Time
1.时间缩放比例
Time.timeScale =0; //时间停止
Time.timeScale = 1; //正常时间
Time.timeScale = 2; //二倍速
2.帧间隔时间
帧间隔时间 主要计算位移的!!
Time.deltaTime; //受timeScale影响。
Time.unscaledDeltaTime; //不受timeScale影响。
3.游戏开始到现在的时间
主要用于单机游戏中计时
Time.time; //受到timeScale影响。
Time.unscaledTime; //不受timeScale影响。
4.游戏开始到现在跑了多少帧
Time.frameCount;
3.Transform相关
1.坐标
通过 transform.position 得到的位置 是基于世界坐标原点的
而 transform.localposition 得到的位置是基于父物体的
注意:位置的赋值不能直接改变x,y,z 只能改变整体。
2.对象当前朝向
世界坐标中 前后 上下 左右是定死的。是 vector3.出来的 是死的
如果想得到对象当前的一个朝向 就是通过transfrom.出来的
transform.forward;当前的面朝向
3.位移
路程 = 方向*速度*时间
方式一:自己计算 transform.position +=transform.forward*速度*time.deltaTime
方式二:用API transform.Translate();
参数一:表示位移多少 方向*速度*时间
参数二:表示相对坐标轴,默认是相对于自己坐标系
transform.Translate(Vector3.forward * 1 * Time.deltaTime, Space.World);
相对于世界坐标轴 的z轴动,始终朝世界坐标系的Z轴正前方移动。
transform.Translate(transform.forward * 1 * Time.deltaTime, Space.World);
相对于世界坐标轴 的自己的z轴动 ,始终朝自身坐标系的Z轴正前方移动
transform.Translate(Vector3.forward * 1 * Time.deltaTime, Space.Self);
相对于自身坐标轴 的世界坐标Z轴动 始终朝自身坐标系的Z轴正前方移动
方式一和方式二是一样的。
但是一般都用方式二也就是API的方法移动。
4.角度和旋转和缩放
1.角度
//相对于世界坐标的角度 API 为: transform.eulerAngles
rotation的返回值为四元数 跟检视面板上还不一样
//相对于父物体的角度 API 为: transform.localEulerAngles
注意:角度的赋值不能直接改变x,y,z 只能改变整体。
2.旋转
自转 API:transform.Rotate(new Vector3(x,y,z));
第一个参数 相当于是旋转的角度 第二个参数 默认不填就是相对于自己坐标转
transform.Rotate(new Vector3(x,y,z),Space.World);
这样就是对世界坐标转
围绕某一个点转 API:transform.RotateAround(Vector.zero,Vector.up,10*time.deltaTime);
参数一: 相对于哪一个点。
参数二:相对于参数一的哪一个轴。
参数三:转多少度 (速度*时间)。
3.缩放
相对于世界坐标系 API:transform.lossyScale
相对于父物体坐标系 API:transform.localScale
注意 相对于世界坐标系的API只能得(get)不能改。
所以 要改大小都是改相对于父物体的缩放大小。
在Unity中 没有提供关于缩放的API 但是可以自己写 就用transform.localScale+=变化的大小*时间。
5.父子关系
1.获取和设置父对象
API: transform.parent 可读可写的方法
可读 就是获取父对象。 可写就是设置父对象
transform.parent = null; 就是父物体为空(断绝父子关系)
另一个API :
transform.SetParent(父物体,是否保留世界坐标的位置,角度,缩放); //进行父子关系的设置。
第二个参数为 true 会保留世界坐下的状态 和父物体进行计算 得到本地坐标
为 false 就不会保留,会直接把世界坐标下的 位置角度缩放 直接赋值到本地坐标
2.和所有子物体断绝关系
API:transform.DetachChildren();
会跟自己所有的子物体断绝关系(但是子物体的子物体不会)。
3.获取子物体
//按名字查找:
API : transform.find("你要查找的子物体的名字"); 可以找到失活的子物体
并且 只能找到自己的子物体,找不到自己子物体的子物体!!
返回的是一个transform信息 可以创建一个gameobject来接收.gameobject
//遍历自己所有的子物体
API : transform.childCount; //得到自己的子物体的数量(失活的也会算进去)(找不到孙子)
通过索引号,去得到自己对应的子物体
API:transform.GetChild(索引号);(如果编号超出会报错)
GameObject.find 和 transform.find的区别:
GameObject.find是查找全场 (并且找不到失活对象)
transform.find 是查找自己的子物体(是可以找到失活对象)
4.子物体的操作
作为子物体能进行什么操作
1.判断自己的父物体是谁:
API: transform(子物体的位置).IsChildOf(父物体的位置); 返回值是一个bool。
2.得到自己作为子物体的编号
API : transform.GetSiblingIndex()
3.把自己设置成第一个子物体
API:要设置的子物体.transform.SetAsFirstSibling() 或 .transform.SetSiblingIndex(0);
4.把自己设置成最后一个子物体
API:
要设置子体.transform.SetAsLastSibling() 或 .transform.SetSiblingIndex(transform.childCount)
5.把自己设置成指定编号的子物体
要设置的子物体.transform.SetSiblingIndex(你要设置的编号)
如果你设置的编号 比子物体的数量的还要大 不会报错,会直接设置成最后一个
5.坐标转换
1.世界坐标 转 本地坐标
位置,点:世界坐标的点 转换 相对于本地坐标的点(受到缩放大小影响)
API : transform.InverseTransformPoint(你要转换的点)
实际用途:判断方位,把你要判断的物体位置 转换为你自己的位置 通过XYZ轴的是否大于0。
方向:世界坐标的方向 转换 相对于本地坐标的方向(不受缩放大小影响) 平移过去
API : transform.InverseTransformDirection(你要转换的方向)
transform.InverseTransformVector3() 此方法也是把世界方向 转换 相对于本地坐标的方向,但是受到缩放影响。
2.本地坐标 转 世界坐标
位置,点:把本地坐标点 转换 相对于世界坐标点(受到缩放大小影响)
API : transform.TransformPoint(你要转换的点)
实际用途:在物体的某个方位创建新物体。
方向:把本地坐标的方向 转换 世界坐标的方向(不受缩放影响)
API : transform.TransformDirection(你要转换的方向)
6.屏幕Screen相关
静态属性
常用的:
1.当前屏幕分辨率 (此方法得到的不是Game窗口的分辨率,得到的是你显示器的分辨率。)
API:Screen.currentResolution
注意:此方法的返回值是一个Resolution类型,Resolution里面包含了屏幕的宽高和刷新率(hz).
2.屏幕窗口当前宽高 (这个得到的是Game窗口的宽高)
API:
Screen.width 宽
Screen.height 高
3.屏幕休眠模式 (发布到手机端的时候 手机会熄屏)
Screen.sleepTimeout=SleepTimeout.NeverSleep //永远都不熄屏
Screen.sleepTimeout=SleepTimeout.SystemSetting //根据设置自动熄屏
不常用的:
1.运行时是否全屏:
Screen.fullScreen=true;
2.窗口模式
独占全屏:Screen.fullScreenMode = FullScreenMode.ExclusiveFullScreen;
全屏窗口:Screen.fullScreenMode = FullScreenMode.FullScreenWindow;
最大化窗口:Screen.fullScreenMode = FullScreenMode.MaxScreenWindow;
窗口模式:Screen.fullScreenMode = FullScreenMode.Windowed;
3.手机平板设备屏幕转向相关
允许自动旋转为左横向: Screen.autorotateToLandscapeLeft = true;
允许自动旋转为右横向: Screen.autorotateToLandscapeRight = true;
允许自动旋转为竖屏: Screen.autorotateToPortrait = true;
允许自动旋转为竖屏倒放:autorotateToPortraitUpsideDown = true;
指定屏幕显示方向:Screen.orientation=ScreenOrientation.(这里面的数据);
静态方法
1.设置分辨率 都是在PC端用的文章来源:https://www.toymoban.com/news/detail-817700.html
Screen.SetResolution(1920,1080,是否全屏 填true就是会默认全屏,false填多少就是多少)文章来源地址https://www.toymoban.com/news/detail-817700.html
到了这里,关于【Unity】系统的重学一遍unity的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!