Unity3D入门之JavaScript动态创建对象
接着上一篇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动态创建对象的更多相关文章
- Unity3D入门之JavaScript
刚刚接触Unity3D游戏引擎,这里做点学习笔记.下面是我建立的简单场景,左侧的Hierarchy(层次)视图里显示了场景中所有游戏对象,这些基本对象可以从Create下拉菜单里创建.当你点击某个对象 ...
- javascript动态创建对象
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 于Unity3D动态创建对象和创建Prefab三种方式的原型对象
于Unity3D动态创建对象和创建Prefab三种方式的原型对象 u3d在动态创建的对象,需要使用prefab 和创建时 MonoBehaviour.Instantiate( GameObject o ...
- 深入理解JavaScript中创建对象模式的演变(原型)
深入理解JavaScript中创建对象模式的演变(原型) 创建对象的模式多种多样,但是各种模式又有怎样的利弊呢?有没有一种最为完美的模式呢?下面我将就以下几个方面来分析创建对象的几种模式: Objec ...
- javascript中创建对象的方式总结
javascript中创建对象的方式总结 具体代码如下: //创建对象的方式: //创建方式一 var person=new Object(); person.name='jack'; person. ...
- 【javascript 动态添加数据到 HTML 页面】
今天简单的学习了一下有关对象字面量的定义和 javascript 如何取出对象字面量的值的知识,javascript 动态添加数据到 HTML 页面的问题. [学习目标]有如下的一组数据通过 Ajax ...
- javascript中创建对象的几种不同方法
javascript中创建对象的几种不同方法 方法一:最直白的方式:字面量模式创建 <script> var person={ name:"小明", age:20, s ...
- 用Javascript动态添加删除HTML元素实例 (转载)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- [Unity3D入门]入门级游戏项目"坦克狙击手"更新
[Unity3D入门]入门级游戏项目"坦克狙击手"更新 在上一篇中我分享了一个尚未完全写好的入门级unity3d项目"坦克狙击手". 本文介绍最新版的" ...
随机推荐
- [topcoder]ZigZag
http://community.topcoder.com/stat?c=problem_statement&pm=1259&rd=4493 动态规划题.如果不用DP,暴力的应当在2^ ...
- 跨平台的目录遍历实现方法(windows和linux已经测试)
dirent.h是gcc下的一个头文件,在windows中是没有的.这个文件中封装了几个对目录进行操作函数: static DIR *opendir (const char *dirname);sta ...
- C#基础精华06(Linq To XML,读取xml文件,写入xml)
1.XML概述: 可扩展标记语言XML(eXtensible Markup Language)是一种简单灵活的文本格式的可扩展标记语言,侧重于存储数据. 2.XML特点 xml 标记语言 html x ...
- win7 64bit下最新Apahe2.4.18+php7.0.2+MySQL5.7.10配置
原文:win7 64bit下最新Apahe2.4.18+php7.0.2+MySQL5.7.10配置 一.说明 以前配置apache+php+mysql都是参考网上的,一般都没有什么问题.最近公司有个 ...
- HDU1171——Big Event in HDU(母函数)
Big Event in HDU DescriptionNowadays, we all know that Computer College is the biggest department in ...
- Kali2.0 Sqlmap清除历史扫描日志
使用Sqlmap扫描SQL注入漏洞时,首次扫描会在SQL的/root/.sqlmap/output/目录下留下 以IP地址为名称的文件夹,如下所示: 而如果该安全漏洞经过修复后,再次使用SQLMAP扫 ...
- 如何定制Sink扩展.Net Remoting功能
http://www.cnblogs.com/rickie/archive/2004/10/21/54891.html
- 24.allegro中光绘gerber[原创]
光绘 一,基本设置 或者: ------------------------------------- ------- ------- 二,需要设置内容: 1)顶层和底层: 2)内部布线层: 3)OU ...
- 1701. Ostap and Partners(并查集-关系)
1701 又是类似食物链的这一类题 这题是找与根节点的和差关系 因为0节点是已知的 为0 那么所有的都可以转换为与0的和差关系 可以规定合并的两节点 由大的指向小的 然后再更新和差关系 有可能最后有 ...
- grep 同时满足多个关键字和满足任意关键字
grep 同时满足多个关键字和满足任意关键字 ① grep -E "word1|word2|word3" file.txt 满足任意条件(word1.word2和word ...