• 【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

    哈哈,好玩吧。

  • 相关阅读:
    Hibernate HQL查询:
    Struts2里如何取得request,session,application
    Hibernate 报错org.hibernate.PropertyAccessException: IllegalArgumentException(已解决)
    PHP 读取文件的几种方法
    PHP 关于文件操作的简单介绍
    VB 中ListView 某一列的颜色添加不上去的解决方法
    SQL Server 版本号汇总
    C# 单元测试
    Web Api单元测试写法
    git bash 出现vim的时候怎么退出
  • 原文地址:https://www.cnblogs.com/rainmj/p/5398075.html
Copyright © 2020-2023  润新知