接着上一篇Unity3D入门文章,这里继续使用JavaScript脚本语言。

调试:Unity集成了MonoDevelop编辑器,在代码某行的左侧点击,即可下一个断点。然后先关闭Unity编辑器,在MonoDevelop的菜单栏中依次点击Run->RunWith->UnityDebugger即可启动Unity编辑器,在编辑器中运行程序即可进入调试状态。

创建对象:GameObject.CreatePrimitive(PrimitiveType.Cube);

通过名称获取对象:GameObject.Find("Cube");

通过标签获取单个对象:GameObject.FindWithTag("MyTag");要设置对象的标签,在Inspector中点击Tag中的Add Tag进入Tag Manager中,在Element 0中输入标签名字即可。

通过标签获取对象数组:GameObject.FindGameObjectsWithTag("newsphere");

克隆对象:var clone : GameObject = Instantiate(cube, cube.transform.position * 2, cube.transform.rotation);其中的cube是已有的对象。

销毁对象:Destroy(clone, 3);这里的“3”代表3秒后销毁对象。

下面的代码将详细展示对游戏对象的各种操作,包括平移、旋转等,先来一张截图。代码同样不能直接运行,需要为全局变量Cylindertexture赋值,就是一张贴图。

 #pragma strict

 //立方体对象
 private var cube : GameObject;
 private var mycube : GameObject;

 //缩放比例
 var scaleX : float = 1.0;
 var scaleY : float = 1.0;
 var scaleZ : float = 1.0;

 //通过标签获取圆柱体对象,这个方法只能获取一个游戏对象
 private var cylinder1 : GameObject;

 //渲染器
 private var render : Renderer;

 //贴图
 public var cylindertexture : Texture;

 //新建立的球体对象
 private var spheres : GameObject[];

 //是否旋转
 private var isCubeRotate = false;

 //按钮提示信息
 private var CubeInfo : String = "旋转立方体";

 //旋转速度
 private var speed : int = 1000;

 function Start () {
     //获取游戏对象
     cube = GameObject.Find("Cube");
     mycube = GameObject.Find("MyCube");

     //克隆游戏对象
     var clone : GameObject = Instantiate(cube, cube.transform.position * 2, cube.transform.rotation);
     Destroy(clone, 3);

     //初始化圆柱体对象
     cylinder1 = GameObject.FindWithTag("MyTag");
     //获取对象的渲染器
     render = cylinder1.GetComponent("Renderer");
 }

 function Update () {
     //初始化球体对象,包括动态添加的球体
     spheres = GameObject.FindGameObjectsWithTag("newsphere");

     //用户点击“旋转立方体”按钮时旋转模型
     if (isCubeRotate)
     {
         if (cube)
         {
             cube.transform.Rotate(0.0f,Time.deltaTime*200,0.0f);
         }
     }
 }

 function OnGUI()
 {
     if (GUILayout.Button("创建立方体",GUILayout.Height(50)))
     {
         //设置该模型默认为立方体
         var objCube = GameObject.CreatePrimitive(PrimitiveType.Cube);
         //给此对象添加一个刚体,用于物理感应
         objCube.AddComponent(Rigidbody);
         //设置这个游戏对象的名称
         objCube.name = "Cube1";
         //设置此模型材质的颜色
         objCube.renderer.material.color = Color.blue;
         //设置此模型的坐标
         objCube.transform.position = new Vector3(0.0f,10.0f,0.0f);
     }

     if (GUILayout.Button("创建球体",GUILayout.Height(50)))
     {
         var objSphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
         objSphere.AddComponent(Rigidbody);
         objSphere.name = "Sphere1";
         objSphere.tag = "newsphere";
         objSphere.renderer.material.color = Color.red;
         objSphere.transform.position = new Vector3(0.0f, 10.0f, 0.0f);
     }

     //添加用于旋转立方体的按钮
     if (GUILayout.Button(CubeInfo,GUILayout.Height(50)))
     {
         if (!isCubeRotate)
         {
             isCubeRotate = true;
             CubeInfo = "停止旋转立方体";
         }
         else
         {
             isCubeRotate = false;
             CubeInfo = "旋转立方体";
         }
     }

     //添加移动球体对象的按钮
     if (GUILayout.Button("移动所有新创建的球体",GUILayout.Height(50)))
     {
         if (spheres)
         {
             for (var sp in spheres)
             {
                 sp.transform.Translate(Vector3.left * Time.deltaTime * 50);
             }
         }
     }

     //添加用于销毁对象的按钮
     if (GUILayout.Button("销毁对象",GUILayout.Height(50)))
     {
         Destroy(cube);
     }

     if (GUILayout.Button("对圆柱体上色",GUILayout.Width(100),GUILayout.Height(50)))
     {
         //修改渲染颜色为绿色
         render.material.color = Color.yellow;
         //为了避免残留,将贴图置空
         render.material.mainTexture = null;
     }
     if (GUILayout.Button("给圆柱体贴图",GUILayout.Width(100),GUILayout.Height(50)))
     {
         render.material = null;
         render.material.mainTexture = cylindertexture;
     }

     //控件偏移
     GUILayout.BeginArea(Rect(650,0,200,500));
     GUILayout.BeginVertical();

     if (GUILayout.Button("立方体沿X轴旋转",GUILayout.Height(50)))
     {
         mycube.transform.Rotate(Vector3.right * Time.deltaTime * speed);
     }
     if (GUILayout.Button("立方体沿y轴旋转",GUILayout.Height(50)))
     {
         mycube.transform.Rotate(Vector3.up * Time.deltaTime * speed);
     }
     if (GUILayout.Button("立方体沿Z轴旋转",GUILayout.Height(50)))
     {
         mycube.transform.Rotate(Vector3.forward * Time.deltaTime * speed);
     }
     if (GUILayout.Button("立方体围绕圆柱体旋转",GUILayout.Height(50)))
     {
         mycube.transform.RotateAround(cylinder1.transform.position, Vector3.up, Time.deltaTime * speed);
     }
     GUILayout.Label("立方体旋转角度" + mycube.transform.rotation);

     //缩放立方体
     GUILayout.Label("X轴缩放");
     scaleX = GUILayout.HorizontalSlider(scaleX, 1.0, 2.0, GUILayout.Width(100));
     GUILayout.Label("Y轴缩放");
     scaleY = GUILayout.HorizontalSlider(scaleY, 1.0, 2.0, GUILayout.Width(100));
     GUILayout.Label("Z轴缩放");
     scaleZ = GUILayout.HorizontalSlider(scaleZ, 1.0, 2.0, GUILayout.Width(100));
     mycube.transform.localScale = Vector3(scaleX, scaleY, scaleZ);

     GUILayout.EndVertical();
     GUILayout.EndArea();
 }

Unity3D入门之JavaScript动态创建对象的更多相关文章

  1. Unity3D入门之JavaScript

    刚刚接触Unity3D游戏引擎,这里做点学习笔记.下面是我建立的简单场景,左侧的Hierarchy(层次)视图里显示了场景中所有游戏对象,这些基本对象可以从Create下拉菜单里创建.当你点击某个对象 ...

  2. javascript动态创建对象

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. 于Unity3D动态创建对象和创建Prefab三种方式的原型对象

    于Unity3D动态创建对象和创建Prefab三种方式的原型对象 u3d在动态创建的对象,需要使用prefab 和创建时 MonoBehaviour.Instantiate( GameObject o ...

  4. 深入理解JavaScript中创建对象模式的演变(原型)

    深入理解JavaScript中创建对象模式的演变(原型) 创建对象的模式多种多样,但是各种模式又有怎样的利弊呢?有没有一种最为完美的模式呢?下面我将就以下几个方面来分析创建对象的几种模式: Objec ...

  5. javascript中创建对象的方式总结

    javascript中创建对象的方式总结 具体代码如下: //创建对象的方式: //创建方式一 var person=new Object(); person.name='jack'; person. ...

  6. 【javascript 动态添加数据到 HTML 页面】

    今天简单的学习了一下有关对象字面量的定义和 javascript 如何取出对象字面量的值的知识,javascript 动态添加数据到 HTML 页面的问题. [学习目标]有如下的一组数据通过 Ajax ...

  7. javascript中创建对象的几种不同方法

    javascript中创建对象的几种不同方法 方法一:最直白的方式:字面量模式创建 <script> var person={ name:"小明", age:20, s ...

  8. 用Javascript动态添加删除HTML元素实例 (转载)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. [Unity3D入门]入门级游戏项目"坦克狙击手"更新

    [Unity3D入门]入门级游戏项目"坦克狙击手"更新 在上一篇中我分享了一个尚未完全写好的入门级unity3d项目"坦克狙击手". 本文介绍最新版的" ...

随机推荐

  1. iOS开发--使用RSA加密

    在iOS中使用RSA加密解密,需要用到.der和.p12后缀格式的文件,其中.der格式的文件存放的是公钥(Public key)用于加密,.p12格式的文件存放的是私钥(Private key)用于 ...

  2. Qt: 自动调整到最合适的大小(不是很明白)

    SortDialog::SortDialog(QWidget *parent) : QDialog(parent) { setupUi(this); groupBox_2->hide(); gr ...

  3. Android:属性scaleType与图片的显示

    ImageView是Android中的基础图片显示控件,该控件有个重要的属性是ScaleType,该属性用以表示显示图片的方式, 共有8种取值 matrix 用矩阵来绘制(从左上角起始的矩阵区域) f ...

  4. Maven中的一点疑惑的地方

    我们建立一个Maven项目,其结构如下:

  5. WCF实例上下文

    实例上下文模式(IntanceContext Mode)表示服务端的服务实例与客户端的服务代理的绑定方式. 在WCF中有三种不同的实例上下文模式,单调(Per-Call)模式,会话(Per-Sessi ...

  6. java网络基本类使用(一)

    1.怎么获取ip相关信息 import java.net.InetAddress; import java.net.NetworkInterface; import java.util.Enumera ...

  7. 新LNMP环境,但是SESSION跨页面或者刷新 session丢失

    唠叨:本地WAMP做了一个微信项目,一切OK,昨天需要在LINUX架设一套LNMP环境.但是,在架设代码的时候,登录总是不成功~~~ 最终解决:权限 其实,作为一个程序猿,只要涉及到服务器内容,都应该 ...

  8. poj 3126 Prime Path( bfs + 素数)

    题目:http://poj.org/problem?id=3126 题意:给定两个四位数,求从前一个数变到后一个数最少需要几步,改变的原则是每次只能改变某一位上的一个数,而且每次改变得到的必须是一个素 ...

  9. Java中的protected访问修饰符

    在某个类中定义的protected 方法和属性和默认权限方法和属性是一样的.比如,某类的protected 方法和属性在包外是不能通过该类实例进行访问的(你能在包外访问一个类的默认权限的方法和属性吗? ...

  10. 信息学院第九届ACM程序设计竞赛题解

     A: 信号与系统 Time Limit: 1000 MS Memory Limit: 65536 KBTotal Submit: 238 Accepted: 44 Page View: 69 Des ...