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项目"坦克狙击手". 本文介绍最新版的" ...
随机推荐
- 【NGUI】屏幕自适应(不用UIStretch,用UIRoot)---------------good
原地址:http://blog.csdn.net/lzhq1982/article/details/18814023 这篇文章是转载的,之前用UIStretch做屏幕自适应,但一直有两个硬伤让我难受, ...
- Fiddler 日志
Fiddler 日志(Logging) 在开发扩展插件及编写FiddlerScript时对调试程序非常有用. 1.输出日志 在FiddlerScript脚本中,你可以这样输出输出日志: Fiddler ...
- 批量扫描互联网无线路由设备telnet,并获取WIFI密码
批量扫描互联网无线路由设备telnet,并获取WIFI密码 http://lcx.cc/?i=4513
- 创业公司Playcafe关门大吉 创始人总结10大失败教训
导读:互联网电视游戏网站PlayCafe的创始人马克·高登森(Mark Goldenson)日前撰文,总结了自己创业失败的十个教训.以下为文章主要内容: 一年半前,我与公司联合创始人戴维·奈格(Dev ...
- Android:再按一次退出程序
感觉这种效果比较友好 //两秒内按返回键两次退出程序 private long exitTime = 0; @Override public boolean onKeyDown(int keyCode ...
- 再谈 retain,copy,mutableCopy(官方SDK,声明NSString都用copy非retain)
之前一直以为retain就是简单的计数器+1,copy就是重新开辟内存复制对象: 其实不是这样,原来之前的自己独自徘徊于糊涂之中. (官方SDK,对NSString属性的定义都是用copy,而不是re ...
- Python图
从一位前辈的博客看到了一张图,先转过来,稍后再细看
- Java设计模式之工厂模式(简单工厂模式+工厂方法模式)
摘自http://blog.csdn.net/jason0539/article/details/23020989 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是 ...
- hdu4630No Pain No Game (多校3)(树状数组)
http://acm.hdu.edu.cn/showproblem.php?pid=4630 给的题解没看懂..搜解题报告看 了N久 终于在cui大神的指点下 搞明白咋回事了 将1-N中的每个数ai ...
- UVa 1637 (概率) Double Patience
题意: 一共有9堆牌,每堆牌四张.每次可以取堆顶点数相同的两张牌,如果有多种方案则选取是随机的. 如果最后将所有牌取完,则视为游戏胜利,求胜利的概率. 分析: 用一个九元组表示状态,分别代表每堆牌剩余 ...