生命周期(按顺序排列)


Awake():脚本唤醒,系统执行的第一个方法,在脚本声明周期内只执行一次,初始化一般可以在这里

Start():Awake之后,Update之前,只执行一次,一般在awake中初始化比这里好,

Update():每帧调用一次,逻辑更新

LateUpdate():在Update之后调用,每帧调用一次,一般摄像机在这里更新

FixedUpdate():固定(时间)更新,Eidt->Project Settings->Time中设置更新频率,默认0.02s,一般用于刚体物理更新,不受帧时间影响

OnDestroy():脚本销毁时调用

OnGUI():绘制GUI,每帧调用

脚本操作对象


创建对象:

1 Hierarchy中创建对象,然后拖动到Scene中

2使用代码动态创建,销毁对象

using UnityEngine;
using System.Collections; public class TCScript : MonoBehaviour { GameObject objCube; void OnGUI(){
if(GUILayout.Button("CreatButton",GUILayout.Height(50)))
{
//创建立方体对象 js实现
objCube = GameObject.CreatePrimitive(PrimitiveType.Cube);
//给立方体增加一组件(这里为刚体)
objCube.AddComponent("Rigidbody");
//设置对象名
objCube.name = "Cube";
//设置材质颜色
objCube.renderer.material.color = Color.blue;
//设置位置
objCube.transform.position = new Vector3(0.0f,10.0f,0.0f); } if(GUILayout.Button("DestroyButton",GUILayout.Height(50)))
{
Destroy(objCube);//马上销毁对象
}
}
}

然后把这个cs脚本拖到默认的摄像机上就可以(似乎随便绑到摄像机不太合理,暂时不管,以后研究ui都绑在哪,绑在某个物体上应该就更不合适了)

获取对象:

1通过对象名获取

获取上面创建的Cube的方法

GameObject obja;
void getObj()
{
obja = GameObject.Find("Cube");
}

如果获取对象下的子对象用(重复命名问题如何解决?使用find只会找到第一个?)

objb = GameObject.Find("Cube/Cube");

2通过标签获取(第一个使用这个标签的)对象

标签的设置:

Hierarchy中新建一个Cube,在Inspector中可以设置标签

使用Add Tag可以设置新标签

也可以在Edit->Project setting->Tag and Layers中查看标签

按标签获取对象

GameObject obj = GameObject.FindWithTag("TagName");

如果多个对象使用同一标签,那么上面方法获取的是第一个设置为TagName的对象

3通过标签获取同一标签的多个对象的数组

GameObject obj = GameObject.FindGameObjectsWithTag("TagName");

绑定对象:

脚本是组件的一种,所以绑定脚本就是绑定脚本组件(除了脚本组件还有网格,例子,物理,声音,渲染等组件)

1拖动实现

把Project中的脚本文件直接拖给Hier archy里面的对象,在Inspector中可以查看对象绑定的脚本,并可对其执行删除等操作

2代码动态实现

GameObject obj = GameObject.Find("Cube");
obj.AddComponent("TCScript");//添加脚本
Renderer render = obj.GetComponent("Renderer");//获取渲染器组件

对象克隆

操作对象旋转平移缩放

objCube.transform.position = new Vector3(0.0f,10.0f,0.0f);//设置物体位置
objCube.transform.position = Vector3(0.0f,10.0f,0.0f);//设置物体位置
objCube.transform.Translate(Vector3.forward*Time.deltaTime*speed);//向(物体)前方平移
objCube.transform.Rotate(Vector3.up*Time.deltaTime*speed);//沿y轴旋转
objCube.transform.localScale = Vector3(0.0f,10.0f,0.0f)//沿y轴放大

脚本间通信


脚本与子对象,自身对象,父类对象的通信



不同类型脚本间相互调用(c#与js)

c#和js在unity中没有本质区别,都继承MonoBehaviour,js的继承被隐藏了,不同之处只有语法,api接口基本完全相同
c#在面向对象上比较好用,一般开发大型游戏都使用c#

c#调用c#脚本(CSTest.cs)
CSTest csscript = obj.GetComponent<CSTest>;
csscript.functionA();

js调用js脚本(JSTest.js)

var jsscript: JSTest = obj.GetComponent("JSTest");
jsscript.functionA();

c#调用js脚本(JSTest.js)

JSTest jsscript = (JSTest)GetComponent("JSTest");
jsscript.functionA();

js调用c#脚本(CSTest.cs)

var csscript = this.GetComponent("CSTest");
csscript.functionA();


Unity(2) 脚本简单操作的更多相关文章

  1. unity 编辑器扩展简单入门

    unity 编辑器扩展简单入门 通过使用编辑器扩展,我们可以对一些机械的操作实现自动化,而不用使用额外的环境,将工具与开发环境融为一体:并且,编辑器扩展也提供GUI库,来实现可视化操作:编辑器扩展甚至 ...

  2. Unity Mono脚本 加密

    加密环境 引擎版本:Unity3D 5.3.4 及更高版本 (使用Mono而并非IL2CPP) 操作系统:CentOS 6.2(Final) 加密环境:Android.IOS(暂定) 加密对象:C#源 ...

  3. Python零基础入门(安装步骤,验证方式, 简单操作)

    本篇文章适合新人小白初步了解Python,涵盖Python的介绍.安装以及简单的基础操作.  1.Python简介 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言.它的设 ...

  4. MySQL基本概念以及简单操作

    一.MySQL   MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MyS ...

  5. 游戏编程之Unity常用脚本类的继承关系

    前言学习Unity开发引擎的初学者会接触大量的脚本类,而这些类之间的关系往往容易被忽略.本文对Unity引擎开发中的一些常用类及其关系进行了简单的归纳总结. 博文首发地址:http://tieba.b ...

  6. oracleLinux7上安装oracle11g r2(脚本简单配置环境)

    一 环境脚本简单配置 #!/bin/bashmv /etc/yum.repos.d/* /tmpmv iso.repo /etc/yum.repos.d/tar zxvf a.tar.gzmv 7Se ...

  7. 进击的Python【第十二章】:mysql介绍与简单操作,sqlachemy介绍与简单应用

    进击的Python[第十二章]:mysql介绍与简单操作,sqlachemy介绍与简单应用 一.数据库介绍 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数 ...

  8. Postgresql部署及简单操作

    PostgreSQL是一个功能强大的开源对象关系数据库管理系统(ORDBMS),在开源数据库使用上与MySQL各领风骚.但也有不少人质疑postgresql的未来,正所谓,赞扬或批判一种数据库都必须先 ...

  9. x01.MagicCube: 简单操作

    看最强大脑,发现魔方还是比较好玩的,便买了一个,对照七步还原法,居然也能成功还原. 为什么不写一个魔方程序呢?在网上找了找,略作修改,进行简单操作,还是不错的,其操作代码如下: protected o ...

随机推荐

  1. Android-基本控件和详解四种布局方式

    转自:https://www.cnblogs.com/ludashi/p/4883915.html 一.常用基本控件 1.TextView 看到Android中的TextView, 我不禁的想到了iO ...

  2. PAT 天梯赛 L1-054. 福到了 【字符串】

    题目链接 https://www.patest.cn/contests/gplt/L1-054 思路 可以先将字符串用字符串数组 输入 然后用另一个字符串数组 从 n - 1 -> 0 保存 其 ...

  3. bzoj4486: [Jsoi2015]串分割

    肉丝哥哥钦定好题 话说我的blog现在为什么到处都是肉丝哥哥 先来想一个弱化版,假如能够n整除K怎么做? 把每个数字看成一个字符串,按字典序排名,这个可以后缀数组解决,然后暴力枚举每种情况,O(1)判 ...

  4. hdu1015 Safecracker —— 回溯

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1015 代码1: #include<stdio.h>//hdu1015 #include&l ...

  5. codeforces 463A Caisa and Sugar 解题报告

    题目链接:http://codeforces.com/problemset/problem/463/A 题目意思:某个人有 s dollar的钱,有 n 种类型的糖果,第 i 种糖果的价值为 xi d ...

  6. 机器学习(十六)— LDA和PCA降维

    一.LDA算法 基本思想:LDA是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的.这点和PCA不同.PCA是不考虑样本类别输出的无监督降维技术. 我们要将数据在低维度上进行投影,投 ...

  7. Unable to resolve target 'android-16'

    Just now when I imported the "android-support-v7-appcompat" to ADT,the console pointed out ...

  8. javascript之闭包,递归,深拷贝

    闭包 理解:a函数执行后return出b函数且b函数可以访问a函数的数据 好处:子函数存储在复函数内部,子函数执行完不会被自动销毁 坏处:占用内存比较大 ex: function bibao(){ v ...

  9. 关于yolo 模型中1X1卷积层的作用

    1X1卷积层的作用: 1.实现跨通道的交互和信息整合.2.进行卷积核通道数的降维和升维.3.就是可以在保持feature map 尺寸不变(即不损失分辨率)的前提下大幅增加非线性特性,把网络做得很de ...

  10. Unix高级环境编程

    [07] Unix进程环境==================================1. 进程终止    atexit()函数注册终止处理程序.    exit()或return语句:    ...