Unity5.X3D 游戏开发技术详解与典型案例-笔记

来源:互联网 发布:恢复删除软件要钱 编辑:程序博客网 时间:2024/05/22 14:14

3.3.1 Rotate&Translate

用于旋转的Rotate方法和用于移动的Translate方法都有4个参数的重载形式。第四个参数为Space枚举类型,如果设置为“Space.Self”变换被应用于自身轴;如果设置成“Space.World”变换被用于相对于世界坐标系统。如果不设置,默认为“Space.Self”。
C#代码片段:

this.transform.Rotate(5,0,0,Space.World);this.transform.Translate(5,0,0,Space.Self);

3.3.2记录时间

如果想每秒增加或者减少一个值,需要乘以Time.deltaTime,同时需要明确用戏中是需要每秒为1个单位还是每帧为1个单位。在FixedUpdate方法中,则需要乘以Time.fixedDeltaTime。

3.3.3 访问游戏对象组件 GetComponent

注意Transform和transform首字母的大小写区别,前者是类或脚本(大写),后者是变量(小写);
附加到游戏对象上的组件可以通过GetComponent方法获得。
例:

transform.Translate(1,0,0);                 //沿X轴移动一个单位GetComponent<Transform>().Translate(1,0,0); //沿X轴移动一个单位

同样,也可以通过GetComponent方法获取其他的脚本。

HelloWorld helloWorld = GetComponent<HelloWorld>(); //获取“HelloWorld”脚本组件helloWorld.sayHello();                              //执行该脚本组件下的sayHello方法

3.3.4 访问其他游戏对象

1.通过属性查看器指定参数

代码中声明public类型的游戏对象应用,在属性查看器中就可以显示这个游戏对象参数,然后就可以将需要获取的游戏对象拖拽到属性查看器的相关参数位置。
例:代码获取游戏对象上的“Test”脚本组件,然后执行doSomething方法。

 public GameObject otherObject; void Update() {     Test test = otherObject.GetComponent<Test>();   //获取“Test”脚本组件     test.doSomething;                               //执行doSomething方法 }

2.确定对象的层次关系
游戏对象在游戏组成对象列表中存在父子关系,可通过Transform组件来找到父对象或子对象

transform.Find("hand").Translate(0,0,1);    //找到名为“hand”的子对象,执行移动transform.parent.Translate(0,0,1);          //找到父对象,执行移动

一旦获取到“hand”子对象,就可以通过GetComponent方法获取“hand”对象上的其他组件,
例:有一个Test脚本挂在子对象“hand”上

transform.Find("hand").GetComponent<Test>().a = 2;  //找到子对象“hand”同时设置“Test”脚本中的变量a=2;transform.Find("hand").Getcomponent<Test>().doSomething();  //执行doSomething方法transform.Find("hand").Getcomponent<Rigidbody>().AddForce(0,0,2);   //"hand"子对象的刚体属性上加一个沿Z轴的大小为2的力

也可以使用脚本来循环获取到所有的子对象,然后对子对象做某种操作,如平移、旋转等。
例:

foreach(Transform child in transform)   //循环获取子对象{child.Translate(0,0,1);                 //移动}

3.通过名字或标签获取游戏对象
Unity脚本中可以使用FindWithTag方法和Find方法来获取游戏对象,FindWithTag方法获取指定标签的游戏对象Find方法获取指定名字的游戏对象。
例:

GameObject name = GameObject.Find("somename");  //获取名为“somename”的游戏对象name.transform.Translate(0,0,1);                //平移GameObject tag = GameObject.FindWithTag("sometag"); //获取标签名称为“sometag”的游戏对象tag.GetComponent<Test>().doSomething();             //调用Test脚本中的doSomething方法

4.通过传递参数来获取游戏对象
一些事件回调方法的参数中包含了而特殊的游戏兑现干活组件信息,例如出发碰撞事件的Collider组件,在OnTiggerStay方法的参数中有一个碰撞体参数,通过这个参数能够得到碰撞的刚体。
例:

void OnTriggerStay(Collider other)//重写OnTriggerStay方法{    if(other.GetComponent<Tigidbody>)//如果该游戏物体上有刚体组件    {        other.GetComponent<Rigidbody>().AddForce(0,0,2);//给刚体施加一个力}    if(other.GetComponent<Test>)    {        other.GetComponent<Test>().doSomething();//调用Test脚本的doSomething方法}}

5.通过组件名称获取游戏对象
可以通过FindObjectsOfType方法和FindObjectOfType方法来找到挂在特定类型组件的游戏对象。FindObjectsOfType可以获取所有挂载指定类型组件的游戏兑现个,FindObjectOfType方法获取挂载指定类型组件的第一个游戏对象。
例:

Test test = FindObjectOfType<Test>();//获取第一个找到的Test组件Debug.Log(test.gameObject.name);//打印挂载“Test”组件的第一个游戏对象的名称Test[] tests = FindObjectsOfType<Test>();// 获取所有的“Test”组件foreach (Test te in tests){    Debug.Log(te.gameObject.name);//打印挂载“Test”组件所有的游戏对象的名称}
阅读全文
0 0
原创粉丝点击