游戏物体
游戏物体
1.物体的标签和层级
标签可以方便查找物体。
层级可以运用在一些操作上,比如Camera中Inspector中的Culling Mask上,可以通过勾选掉一些层级来屏蔽显示一些物体
2.摄像机
组件Camera>Projection下的persepective表示透视,透视模式下可以通过Field in view调镜头的角度;另一个Orthography表示正交即在播放时场景没有透视效果。
组件Camera>Clipping Planes为视距设置选项,在视距范围之外(高于最远视距,低于最近视距)的物体无法被摄像机看到。
3.预制件
3.1克隆预制件
使用的API:GameObject.Instantiate(变量名);
示例:
using UnityEngine; public class Test : MonoBehaviour { void Start() { GameObject go = Resources.Load<GameObject>("Cubes/Cube"); GameObject.Instantiate(go); } }
在Project中新建Resources文件夹,在Resources文件夹下新建Cubes文件夹,将Hierachy中做好的物体Cube拖入Cubes文件夹中,制成预制件。该段代码实现的功能是:在运行时将Resources/Cubes文件夹中的Cube预制件克隆一份并显示。
3.2修改预制件
预制件的修改的两种方式;
第一种:在Project中双击预制件,或者在Hietachy中点击其中一个预制件的最后的“>”标志,进入预制件修改视图,在修改视图中进行预制件的修改。
第二种:在Hierachy中选择一个预制件,直接进行修改,修改后再单击Hierachy中的预制件,在Inspector中找到Override按钮,点击按钮并选择Apply All即可完成对预制体的修改。预制件的Inspector中的组件参数修改后会留下标记,在标记行点击鼠标右键会出现Apply to prefab”/*预制件名称*/”的提示框,点击即将修改应用至预制件。
4.通过脚本操作物体
4.1查找物体
4.1.1按照路径查找物体
使用的API:GameObject.Find(物体的Hietachy路径);
示例:
using UnityEngine; public class Test : MonoBehaviour { void Start() { GameObject go = GameObject.Find("Cube/Sphere"); go.SetActive(false); } }
在Hierachy中新建一个物体Cube,在Cube下新建一个子物体Sphere,将含上面代码的脚本挂载到某一物体上,可以实现在运行时隐藏物体Sphere,若一个文件夹下有同名的多个物体,则查找到的物体为创建时间最短的物体。
4.1.2.按照标签查找
使用的API:GameObject.FindGameObjectWithTag("标签名");
示例:
using UnityEngine; public class Test : MonoBehaviour { void Start() { GameObject go = GameObject.FindGameObjectWithTag("Player"); go.SetActive(false); } }
该段代码的功能是找到最后将标签设置成Player的物体,并在运行时隐藏该物体。
4.2修改物体名称
使用的API:物体名.name=”修改后物体名称”;
示例:
using UnityEngine; public class Test : MonoBehaviour { void Start() { GameObject go = GameObject.Find("Cube/Sphere"); go.name = "CuteSphere"; } }
该段代码功能是找到物体Sphere,并在运行时将该物体名称改为CuteSphere。
4.3修改物体位置
使用的API:变量名.transform.position=/*更改后的位置*/
示例:
using UnityEngine; public class Temp : MonoBehaviour { public GameObject cube; void Start() { cube.transform.position = new Vector3(2, 1, 3); } }
该段代码功能是,将物体的位置移动到世界坐标(2,1,3)的位置。
如果是想让物体移动到相对坐标(2, 1, 3)的位置,可将代码cube.transform.position = new Vector3(2, 1, 3);写成cube.transform.localposition = new Vector3(2, 1, 3);
如果想让找到的物体在运行时旋转一定角度,可以将上面示例中的代码cube.transform.position = new Vector3(2, 1, 3);写成go.transform.Rotation= Quaternion.Euler(new Vector3(a, b, c))或cube.transform.eulerAngles = new Vector(a,b,c))/*a,b,c表示旋转角度*/;
如果想让找到的物体在运行时放大或缩小,可以将上面示例中的代码cube.transform.position = new Vector3(2, 1, 3);写成cube.transform.localScale = new Vector3(a,b,c))/*a,b,c表示放大倍数*/;
4.4删除物体
使用的API:Destroy( );
示例:
using UnityEngine; public class Test : MonoBehaviour { void Start() { GameObject go = GameObject.Find("Cube/Sphere"); Destroy(go); } }
该段代码功能是找到物体Sphere,并在运行时删除该物体。
如果想实现在运行后5秒消除,可以将代码Destroy(go);修改为Destroy(go,5);。
如果想让物体在切换场景的时候不销毁,可以将Destroy(go);修改为DontDestroyOnLoad(go);。
4.5克隆物体
示例:
using UnityEngine; public class Test : MonoBehaviour { public GameObject Cube; void Start() { GameObject.Instantiate(Cube); } }
将含上面代码的脚本挂载到某一物体上,并将需要克隆的物体Cube拖入脚本组件中,运行后便可在场景中得到一个克隆的预制体Cube。