zoukankan      html  css  js  c++  java
  • 开始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;//设置材质为红色
            }
        }
    }

  • 相关阅读:
    PHP __autoload()方法真的影响性能吗?
    MYSQL 逻辑架构
    Ajax.dll的初探
    教育技术反思
    祝天下所有的老师教师节快乐
    Asp.net+Xml+js实现无线级下拉菜单
    有调查就有发言权
    控件事件神奇实效
    Inspiration 7.6使用时出现的问题
    最常用的加密类
  • 原文地址:https://www.cnblogs.com/kootimloe/p/14226828.html
Copyright © 2011-2022 走看看