zoukankan      html  css  js  c++  java
  • 【Unity】6.3 通过 C# 脚本创建和访问游戏对象

    分类:Unity、C#、VS2015

    创建日期:2016-04-16

    一、简介

    在游戏开发过程中,脚本不但需要访问脚本所在的游戏对象的组件,还经常需要访问和控制真他游戏对象。另外,根据项目需求,还可能需要通过脚本创建对象。

    本节示例的最终运行效果如下:

    image

    二、查找场景中的游戏对象

    在Unity脚本中,开发人员可以通过下面量的方式来访问游戏对象。

    1、通过名称字符串来查找

    使用函数GameObject.Find()查找在参数中指定的游戏对象。如果场景中存在指定名称的游戏对象,则返回该对象的引用,否则返回null。如果存在多个重名的对象,该方法仅返回第一个对象的引用。

    例如:

    private GameObject obj;

    void Start()

    {

    //寻找整个场景中名为Cube的游戏对象并赋予obj变量

    obj = GameObject.Find("Cube");

    }

    2、通过标签(Tag)来查找

    使用函数GameObject.FindWithTag()查找在参数中指定的游戏对象。如果场景中存在指定标签的游戏对象,那么返回该对象的引用,否则返回null。

    例如:

    GameObject player=GameObject.FindWithTag("player");

    3、注意的问题

    获取游戏对象或组件的函数都比较耗时,因此,一般不要在Update()方法中去获取这些对象,而是应该在Start()方法中查找并将其保存到声明的字段变量中,然后再在Update()方法中使用这些组件或对象。

    三、创建游戏对象

    除了查找场景中的游戏对象外,当然也可以直接用脚本创建对象并将其添加到场景中。具体用法见接下来介绍的示例。

    在实际项目中(包括游戏项目、虚拟现实VR项目,增强现实AR项目、……),这些场景中动态添加、修改或者删除的对象都需要通过脚本来控制。

    四、本节例子的设计步骤

    1、在Unity的Project中Assets文件夹下添加一个名为“6.3”的子文件夹,然后在该文件夹下创建一个名为“Scene6_3.unity”的场景。

    2、向场景中添加一个Plane,设置(复位)其位置:

    image

    3、向场景中添加一个Cube。

    4、调整摄像机以及Cube的参数,使其方便地可看到:

    image

    其中,Cube的参数如下:

    image

    Main Camera的参数如下:

    image

    5、向场景中添加一个空GameObject,并将其换名为manager:

    image

    6、切换到VS2015,在6.3子文件夹下添加一个名为“Demo3_1.cs”的脚本文件:

    image

    添加后看到的结果如下:

    image

    7、将Demo3_1.cs文件改为下面的内容并保存:

    using UnityEngine;
    using System.Collections;
    
    public class Demo3_1 : MonoBehaviour
    {
        public Texture texture;
        private GameObject obj;
        private Renderer render;
        void Start()
        {
            //获取游戏对象
            obj = GameObject.Find("Cube");
            //获取该对象的渲染器
            render = obj.GetComponent<Renderer>();
        }
    
        void OnGUI()
        {
            if (GUILayout.Button("创建立方体", GUILayout.Height(50)))
            {
                //设置该模型默认为立方体
                GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Cube);
                //为对象添加一个刚体,赋予物理属性
                obj.AddComponent<Rigidbody>();
                //赋予对象的材质红色
                obj.GetComponent<Renderer>().material.color = Color.green;
                //设置对象的名称
                obj.name = "Cube";
                //设置此模型材质的位置坐标
                obj.transform.position = new Vector3(0, 5f, 0);
            }
            if (GUILayout.Button("创建球体", GUILayout.Height(50)))
            {
                //设置该模型默认为立方体
                GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Sphere);
                //为对象添加一个刚体,赋予物理属性
                obj.AddComponent<Rigidbody>();
                //赋予对象的材质红色
                obj.GetComponent<Renderer>().material.color = Color.red;
                //设置对象的名称
                obj.name = "Sphere";
                //设置此模型材质的位置坐标
                obj.transform.position = new Vector3(0, 5f, 0);
            }
            if (GUILayout.Button("添加颜色", GUILayout.Width(100), GUILayout.Height(50)))
            {
                //修改渲染颜色为红色
                render.material.color = Color.red;
            }
            if (GUILayout.Button("添加贴图", GUILayout.Width(100), GUILayout.Height(50)))
            {
                //添加组件贴图
                render.material.mainTexture = texture;
            }
        }
    }

    8、切换到Unity,向6.3子文件夹下拖放一个图片(随便选一个图片就行):

    image

    9、在层次视图中选中manager,然后将Demo3_1拖放到检视图中,再将图片拖放到检视图脚本下的Texture上(赋初值):

    image

    10、按【播放】按钮进入预览模式,即可看到下面的运行界面:

    image

    单击【创建立方体】按钮,会看到下落的立方体(因为代码中添加了刚体所以会自动下落),但是下落到Plane上后就停下来了:

    image

    单击【创建球体】按钮,这个球会下落到立方体的上面停下来:

    image

    单击【添加颜色】按钮,就会给左边那个立方体换色:

    image

    单击【添加纹理】按钮,就会给左边那个立方体贴图:

    image

    哈哈,好玩吧。

  • 相关阅读:
    How to install VXDIAG Honda, Toyota and JLR SDD software
    16% off MPPS V16 ECU tuning tool for EDC15 EDC16 EDC17
    Cummins INSITE locked and ask for verification code
    How to use BMW Multi Tool 7.3 to replace lost key for BMW X1
    Bleed Brake Master Cylinder with Intelligent Tester IT2
    Porsche Piwis Tester II “No VCI has been detected”,how to do?
    Creader VIII VS. Creader VII+
    How to solve GM MDI cannot complete the installation
    汽车OBD2诊断程序开发 (原文转载,思路很清晰!)
    汽车节温器单片机开发思路
  • 原文地址:https://www.cnblogs.com/rainmj/p/5398075.html
Copyright © 2011-2022 走看看