当前位置:   article > 正文

Unity --- 脚本中的Debug类和物体类(GameObject)的使用_unity debug

unity debug

Debug

1.Debug是unity库中的一个类

2.Debug.Log() --- Log这个静态方法可以在console控制台中输出一个字符串,这个要输出的字符串就是Log括号中的参数

Log方法还有一个变种:LogWarning()  --- 这个方法可以将括号内的字符串以警告的形式输出

LogError() --- 这个则是以错误的形式输出

3.我们还可以通过Debug在Unity图形界面中绘制线

DrawLine方法需要传两个参数,这两个参数不是以向量的形式存在的,而是以点的方式存在的第一个参数是起点,第二个参数是终点

这个线只在图形界面处看的到(上面的框),在游戏界面处是看不到的(下面的框)

我们还可以在这里面传入第三个参数来改变线的颜色:

关于颜色有一个专门的结构体类 --- Color,我们可以直接通过这个结构体调用静态颜色属性来获取颜色参数 --- 

 

上面这个是绘制射线要调用的方法,这个方法的参数和话线段的参数一样,只不过前两个参数的意思发生了改变:

第一个参数是射线的起点,第二个参数则是射线上的某一点(随便我们定) --- 这个参数是用来确定射线的方向的

关于drawline以及所有画图操作的补充!!

这些方法都要放在updata / lateupdat / fixedupdate方法中,原因是放在其它方法中的话这个方法只会被调用一次,在调用它的那一帧中画出对应的线条/或者是图像,然后下一帧画面刷新,由于该方法没被调用,所以在下一帧画面中是不会画出这一根线的

这样的话只能在一帧中看到这个线,然后就没有了,如果想让线每帧都显示的话就要用updata方法中进行刷新


GameObject

1.每当我们创建了一个游戏物体的时候,我们就相当于创建了一个对应的游戏物体对象

2.当我们在这个游戏物体上挂载了脚本后,当我们在编译脚本时,我们可以访问脚本所挂载的游戏对象所对应的游戏物体类对象,访问方式如下:

 先通过游戏物体类实例化一个游戏对象变量来接收游戏对象的引用,然后通过this指针+点操作符+gameObject访问当前脚本所挂载的游戏对象。

(注意this指针只能在成员函数中使用)

go接收了游戏对象的引用后,也能够访问存储当前脚本所挂载的游戏对象的内存空间了。

3.GameObject中的方法:

go.name / 直接用gameObject调用也没问题 --- 可以访问到当前游戏物体的名字属性

    .tag可以访问当前游戏物体的标签

    .layer可以访问当前游戏物体的图层

4.在脚本中的类中,我们也可以声明一个游戏对象变量作为我们的成员变量;

当声明了这个变量之后,在脚本所属的游戏对象的inspector(检查)窗口处我们找到脚本的位置并把它点开,可以发现它下面多了这么一个东西:

那个A就是我们声明的游戏对象变量的变量名,而右边的那个框则是用来定义我们声明的游戏对象变量的 (就是用来给游戏对象变量赋值的)

赋值的方法用两种的:1.点开框框,直接选择我们用来赋值的游戏对象 ; 2.在hirarchy层级中将我们要赋值的游戏对象文件拖拽到这个框中

赋值好后我们就可以在脚本中通过这个游戏对象变量对赋值给它的游戏对象进行访问和操作了

5.获取游戏对象激活状态的方法 --- 调用两个属性 activeSelf / activeHierarchy

游戏对象变量名. activeself  ---- 获取游戏对象自身的激活状态(激活时为true,没激活为false)

游戏对象变量名.activeHierarchy ---- 获取游戏对象在层级面板中的的激活状态(激活时为true,没激活为false)

这两个激活状态有什么区别呢?

这得从一个现象讲起:我们知道当一个父物体处于非激活状态的时候,父物体下的所有子物体(间接或直接)都会跟随父物体处于非激活状态

但是!!!对于子物体自身而言,它依然是处于激活状态的!!,那么这个时候子物体到底是处于激活状态还是非激活状态呢? 

答案是非激活状态

子物体跟随父物体激活状态的判断等级比子物体自身是否激活的判断等级高

也就是说,当activeHierarchy为flase的时候,无论activeself是false还是true,游戏对象处于未激活状态

当activeHierarchy为true的时候,activeself也处于true,游戏对象处于激活状态

当activeHierarchy为true的时候,activeself处于false,游戏对象处于未激活状态

 

6.游戏对象上都会挂载组件,每个组件都是一个c#类文件,我们在自己写的脚本中可以直接调用这些类来实例化对应的组件对象,通过组件对象我们就能够对组件进行访问和修改

先讲讲 Transfrom 组件特例:

在脚本文件中我们可以直接调用Transforn类来实例化一个Transforn对象,获取当前组件挂载的游戏对象的transform组件的语法如下 --- 在函数中调用this来访问

如果是访问组件没挂载的游戏对象的话,我们首先要按照上面做的声明一个游戏对象成员变量,然后在unity中给它赋一个游戏对象,然后再在脚本中通过:游戏对象成员变量名. transform

 接收到另一个游戏对象的transform组件之后,我们就能够调用和访问组件对象中的成员变量和方法了

比如 this.transform.position 调用后就能够获取当前游戏对象在世界坐标系下的坐标了

注意!!! 只有Transform组件才能直接通过this指针访问到,访问其它的组件都要通过下面这个方法:

组件类名 组件对象名 = GetComponent<组件类名>() 

通过这种方式能够获取的组件对象只有当前脚本挂载的游戏对象上的组件

注意:一个父物体只能拥有一个子物体,而一个子物体也可以拥有自己的子物体 

 在脚本中还能添加组件

 添加组件的方法是要通过脚本所挂载的游戏对象gameObject调用的,然后<这里面放的是我们要添加的组件的组件名>

如果要在其它游戏对象中添加组件的话,我们可以直接用被赋值好的游戏对象成员变量来访问添加组件方法就ok了

注意!通过游戏物体名称来找和通过游戏物体标签来找的方法都是通过GameObject类直接调用静态方法实现的 然后通过标签找有两种方法:

当只有一个物体使用我们要找的标签索引的时候用单数的”Object“ 

有多个物体使用的时候用复数的”Objects“ --- 复数的”Objects“静态方法返回的是一个游戏对象数组,它会将所有具有我们传进来的索引标签的游戏对象都放到这个数组中然后返回

上面这个方法是在设置游戏物体的 actibeself 激活状态 


如何通过脚本调用预制体来在游戏场景中实例化游戏对象呢?

1.在脚本中创建(声明)一个预制体对象来接收我们要调用的预制体(预制体对象的类型也是GameObject,游戏对象的类型也是),声明(创建)好之后我们就能在inspector界面处发现多了个GameObjec对象赋值接口,选择我们要调用的预制体,并将其传给这个对象

2.拿到我们要调用的预制体之后,我们就能通过这个预置体来实例化一个游戏物体

调用静态函数Instantiate函数(把预制体当作参数传过去)来调用预制体创建一个游戏对象

这个Instantiate函数有10个重载方法,每一个都是不同的生成方式

然后这个方法被调用之后是有返回值的,返回的就是通过这个方法创建的游戏对象

这个方法的参数是我们要销毁的对象 

通过脚本创建和得到的一切都会在脚本结束后全部被销毁

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

闽ICP备14008679号