Unity3D – 实例

OnGUI() 函数用于在界面中显示按钮,玩家可以通过单击按钮实现与立方体的交互功能。

使用 CreatePrimitive 方法创建 Unity 3D 系统自带的基本游戏对象

using UnityEngine;
using System.Collections;
public class CreatePrimitive:MonoBehaviour{
    OnGUI(){
        if(GUILayout.Button("CreateCube", GUILayout.Height(50))){
            GameObject m_cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
            m_cube.AddComponent<Rigidbody>();
            m_cube.GetComponent<Renderer>().material.color = Color.blue;
            m_cube.transform.position = new Vector3(0, 10, 0);
        }
        if(GUILayout.Button("CreateSphere", GUILayout.Height(50))){
            GameObject m_cube = GameObject.CreatePrimitive(PrimitiveType.Sphere);
            m_cube.AddComponent<Rigidbody>();
            m_cube.GetComponent<Renderer>().material.color = Color.red;
            m_cube.transform.position = new Vector3(0, 10, 0);
        }
    }
}

使用 Instantiate 实例化方法将预制体实例化为对象

这种方法类似于 Flash(Animate)中的元件。

将预制体复制一份到场景里的过程叫实例化,在 Project 面板中将预制体拖曳到 Inspector 面板中可以实例化一个对象。

预制体的实例化不是普通的复制,预制体实例化后产生的新游戏对象依然保持着与预制体的关联,也就是预制体进行添加组件、修改组件属性等改变,预制体实例化产生的游戏对象也会发生相应的改变。

调用 Instantiate 方法实例化游戏对象与调用 CreatePrimitive 方法创建游戏对象的最终结果是完全一样的,实例化游戏对象会将对象的脚本及所有继承关系实例化到游戏场景中。

Instantiate 实例化方法比创建物体的 CreatePrimitive 方法执行效率要高很多。在开发过程中通常会使用 Instantiate 方法实例化对象,Instantiate 方法调用时一般与预制体 Prefab 结合使用。

if(Input.GetButtonDown("Fire1")){
    Instantiate(newObject, transform.position, transform.rotation);
}

使用函数进行移动、旋转、缩放

transform.Translate()
transform.Rotate()
transform.localScale

为游戏项目里的游戏场景添加两个游戏对象:Cube 和 Directional,前者是脚本要操作的游戏对象,后者是负责游戏场景照明的游戏对象。
然后创建一个 Plane 位于 Cube 下方。调整游戏场景中 3 个游戏对象的位置,使得 Game 视图达到最佳的效果。
随后在 Project 视图里,新建一个 SampleScript:

using UnityEngine;
using System.Collections;
public class SampleScript:MonoBehaviour
{
    public GameObject myCube;
    public int transSpeed = 100;
    public float rotaSpeed = 10.5f;
    public float scale = 3;
    void OnGUI(){
        if(GUILayout.Button("移动")){
            myCube.transform.Translate(Vector3.forward*transSpeed*Time.deltaTime, Space.World);
        }
        if(GUILayout.Button("旋转")){
            myCube.transform.Rotate(Vector3.up*rotaSpeed, Space.World);
        }
        if(GUILayout.Button("缩放")){
            myCube.transform.localScale=new Vector3(scale, scale, scale);
        }
    }
}

脚本声明了 4 个变量,且都使用 public 修饰,所以它们可以作为属性出现在组件下。

将脚本 SampleScript 赋予 Main Camera,运行游戏,在 Game 视图的左上角会出现 3 个按钮:“移动”,“旋转”和“缩放”。单击按钮,即可完成对立方体对象的指定操作。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注