欢迎来到unity学习、unity培训、unity企业培训教育专区,这里有很多U3D资源、U3D培训视频、U3D教程、我们致力于打造业内unity3d培训、学习第一品牌。
Mono Develop脚本编辑器介绍
Unity3d目前支持三种语言的脚本程序:C#,JavaScript,Boo
三种语言其实效率是相当的,最后都会编译成Unity3D内置的 中间代码。目前国内用C#的占大多数。
注意:
1) 项目运行过程中的修改不会保存
2) 脚本只能依附于游戏对象或由其他脚本调用才能运行
3) 一个脚本可以放在多个游戏对象上面,是多个实例
4) 一个脚本的多个实例和其他脚本之间互不干扰
脚本在Project中的显示名称不要加cs,类名要和cs名称一致,所有类继承自MonoBehaviour。
初始化不要放在构造函数中,而是放到Start()方法中。
放到游戏对象中的脚本可以在Inspector中修改属性,get/set写法属性不被识别,直接public字段就能当属性用,不写修饰符就是私有private
项目工程分层设计
Scenes:存放场景
Scripts:存放脚本
Resources:资源包
Textures:贴图
Materials:材质
Audios:声音
Models:模型
VS编译器
更改默认开发工具:
Edit>preferences>Extemal Tools>Extemel Script Editor>D:\Program Files\Microsoft Visual Studio 12.0\Common7\IDE>devenv.exe>关闭
创建,销毁,克隆游戏对象
创建:GrameObject cube =GrameObject.CreatePrimitive(PrimitiveType.Cube):
cube.name=”立方体”;//设定名字
cube.renderer.material.color=Color.red;
克隆:GrameObject obj =(GameObject)Instantiate(cube);
销毁:Destroy(obj,1)//一秒后销毁
1、//给游戏物体添加名为FoobarScript的脚本
GameObject.AddComponent ("FoobarScript");
2、//给游戏物体添加刚体
Rigidbody rb = GameObject.AddComponent ("Rigidbody");
3、//给游戏物体添加球体碰撞器
SphereCollider sc = GameObject.AddComponent ("SphereCollider");
常用核心类:
GambeObject 类
本类为“游戏对象”类。场景中所有的游戏对象都是通过实例化该类来生成的。
1)通过名称来查找:
GameObject player = new GameObject("Player");
GameObject go=GameObject.Find(“Player”);
2)通过tag标签获取单个游戏对象:
GameObject go=GameObject.FindWithTag(“Player”);
GameObject go=GameObject..FindGameObjectWithTag (“Player”);
3)通过游戏标签获取多组游戏对象:
GameObject[] go=GameObject.FindGameObjectsWithTag (“Player”);
Time类
属性:deltaTime
只应该在Update()中使用deltaTime,OnGUI、FiexedUpdate等里面不要用。
例:
//从3开始向下倒计时。
float a=3.0f;
void Update () {
a-=Time.delatTime;
print(a);
}
//按下A键,游戏物体向左移动;按下D键,游戏物体向右移动
float move_h=0;
if (Input.GetKey (KeyCode.A)) {
move_h-=Time.deltaTime;
}
if (Input.GetKey (KeyCode.D)) {
move_h+=Time.deltaTime;
}
transform.Translate(new Vector3(move_h,0,move_v));
组件引用函数
如果要访问的组件不属于常用组件,或者访问的是游戏对象上的脚本(脚本属于自定义组件),可以通过组件引用函数来得到组件的引用。
GetComponent 得到组件
GetComponents 得到组件列表(用于有多个同类型组件的时候)
GetComponentInChildren 得到对象或对象子物体上的组件
ScriptName other = GameObject.GetComponent<ScriptName>();
这个操作比较耗时,把此操作放到Start()中
协调程序(Coroutine)
协同程序,即在主程序运行时同时开启另一段逻辑处理来协同当前程序的执行。换句话说,开启协同程序就是开启一个线程。
在Unity3D中,使用MonoBehaviour.StartCoroutine方法即可开启一个协同程序,也就是说该方法必须在MonoBehaviour或继承于MonoBehaviour的类中调用。
使用StartCoroutine(string methodName)可以开启一个线程
Yield
Yield语句是一种特殊类型的Return(返回)语句,它可以确保函数在下一次被执行时,不是从头开始,而是从Yield语句处开始。
可以实现将一段程序延迟执行或者将其各个部分分布在一个时间段内连续执行
例:
void Start () {
print("Start开始");
StartCoroutine(Do());
print("Do调用后");
}
IEnumerator Do(){
print("Do开始");
yield return WaitForSeconds(3.0f);
print("暂停3秒后");
}
输出的语句为:
Start开始
Do开始
Do调用后
(3秒之后)暂停3秒后
Random类(随机数)
float a=Random.value;
int b=Random.Range(0,100) 包括最大和最小
float c=Random.Range(0.0f,1.0f); 包括最小但不包括最大
消息传递函数
GameObject.SendMessage:向自身的脚本中发送消息
GameObject.BroadcastMessage:向自身及子物体的脚本中发送消息
GameObject.SendMessageUpwards:向自身及父物体中发送消息
更多精彩情关注:http://www.gopedu.com/