开始Unity学习
开始Unity学习
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Script1 : MonoBehaviour { private void Start() { MeshRenderer meshRenderer = this.GetComponent<MeshRenderer>();//获取组件 meshRenderer.material.color = Color.green; } private void Update() { this.transform.Rotate(0, 0, 160 * Time.deltaTime);//每帧旋转物体,Time.DeltaTime 俩帧的时间间隔s } }
查找游戏对象
1.GameObject.Find("GameObject");
通过场景里的名字或者一个路径直接获取游戏对象
例如获取场景里的Cube对象
private void Start() { GameObject cube = GameObject.Find("Cube"); MeshRenderer meshRenderer = cube.GetComponent<MeshRenderer>(); meshRenderer.material.color = Color.red;//设置材质为红色 }
如果游戏对象不在最上层,最好使用路径的方法,因为游戏对象会有重名的情况,路径用“/”符号隔开。
例如我将Cube放到GameObject下面
GameObject cube = GameObject.Find("GameObject/Cube");
假如我GameObject对象重名,例如我场景里有三个Cube
private void Start() { GameObject cube = GameObject.Find("Cube"); MeshRenderer meshRenderer = cube.GetComponent<MeshRenderer>(); meshRenderer.material.color = Color.red;//设置材质为红色 }
发现拿到的是最后一个Cube。
如果这个GameObject的active是false的话,这个方法将找不到该对象。
例如我将Cube的active设置为false
此时再运行就会发现控制台报错,因为找不到Cube对象,该对象对应的组件就找不到了。
GameObject.Find()方法在游戏中的使用频率很高.但是很耗性能,尤其是在Update()方法中不要去Find游戏中的对象
2.Transform.Find()
GameObject.Find()方法无法获取active = false的游戏对象,但是Transform.Find()就可以获取到。
Transform.Find()也得顶级付对象active为true才行。比如场景里cube1的active为false,我希望点击显示Cube1时场景才显示,这时Transform.Find()就能做到GameObject.Find()无法做到的事。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Script1 : MonoBehaviour { private GameObject cube1; private void Start() { GameObject cube = GameObject.Find("Cube");//先拿到Cube this.cube1 = cube.transform.Find("Cube1").gameObject;//再通过Transform.Find()拿到Cube1 } private void Update() { } private void OnGUI() { if(GUILayout.Button("显示Cube1")) { this.cube1.SetActive(true); MeshRenderer meshRenderer = this.cube1.GetComponent<MeshRenderer>(); meshRenderer.material.color = Color.red;//设置材质为红色 } } }