GameObject:
1.GameObject是什么?
2.组件中的gameObject
3.GameObject常用属性和方法
1.GameObject是什么
GameObject就是游戏对象或者说游戏物体,层级面板中可以选择的都是GameObject。同时,GameObject在代码中也是一个类型(可以在VS选中后F12查看定义),这个类型就代表着游戏物体在C#中可以通过公开字段(变量),在Inspector面板中设置该字段的值。
Tip:如图所示,在Inspector面板,字段的名字会被识别改写。比如g0,小写英文会大写。BoxCollider不同单词会识别出用空格隔开。
设置字段值:
1)点字段后小圆圈,然后在出现的窗口中单机选一个。
2)按住Hierarchy中的对象名,拖到Inspector字段处。
2.组件中的gameObject
组件中可以使用来自基类继承的gameObject属性,直接访问脚本所在的游戏物体。类似transform。
gameObject:组件所在物体
transform:组件所在游戏物体的transform组件
大写的GameObject是类型,小写的gameObject是属性。gameObject这个属性来自(<-表示继承于):当前脚本<-MonoBehaviour<-Behaviour<-Component
来自于Component这个基类。
print打印控制台消息可见gameObject是带所在脚本游戏物体本身。
Tip:可以gameObject.gameObject.gameObject.gameObject。transform.transform.transform不过没有意义
gameObject.transform等价于transform
这是因为GameObject类定义有GameObject类型的gameObject。
Transform类继承自Component类,Component类定义有Transform类型的tranform。
而字段可以调用自己类型/基类可以调用它定义的字段。
GameObject类中定义有Transform类型的字段transform,因此我们有了GameObject类型的字段就可以通过调用transfrom得到物体的Transform组件。
可以print(g0.transform.position);打印获取游戏对象的transform组件的position
Tip:输出postion结果只保留1位小数,四舍五入。
3.GameObject常用属性和方法
属性
1.name:游戏物体名称,和层级面板中等同
2.tag:游戏物体的标签
3.activeInHierarchy:显示状态
4.transform:这个游戏物体的变换组件
5.static GameObject Find(string path):一个静态方法,查找游戏物体(参数是路径,"C"代表从根目录找"C","C/D"代表在C下面找"D")
方法
1.GetComponent<T>():获取游戏物体身上的组件,T代表要查找的类型,类似的方法有很多
2.SetActive(bool):修改显示状态,参数为false隐藏,true显示
使用:
1.name
当前物体名字不是奥利给会打印指定消息
2.tag
Inspector的Tag设置
选择Add Tag...可以添加Tag。进入添加标签的面板。点+添加Tag名,点-删除Tag
点+添加Tag名
写完名字Save即可
如果当前物体的Tag是 奥利给!就打印 干就完辣!
设置Tag
小结:可以用tag区别类型,比如小兵造成伤害,英雄造成伤害的不同。
3.activeInHierarchy
4.
gameObject.transform.position;是世界坐标
gameObject.transform.localPosition;是本地坐标
世界坐标不一定是Inspector面板上的坐标,面板上的坐标如果有父物体会是相对父物体坐标。
本地坐标会显示Inspector面板上的坐标。
5.Find(string path) path:路径,这里是相对路径
tip:
问题:Unity3d_can't add the script component "" because the script class cannot be found
原因:文件名与文件内容中的类名不相符。
6.GetComponent<T>() T是什么类型,返回什么类型
Console报错是因为GameObject不是一个组件,所以不能GetComponent<GameObject>()得到GameObject
编译器没有报错是因为GetComponent<GameObject>()会得到none
用GetComponent<BoxCollider>()来获取BoxCollider对象,然后输出字段
7.SetActive(bool) 设置是否显示
gameObject.SetActive(false)隐藏