开始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;//设置材质为红色
        }
    }
}

原文地址:https://www.cnblogs.com/kootimloe/p/14226828.html