Unity
来源:互联网 发布:淘宝旺旺买家官方下载 编辑:程序博客网 时间:2024/05/01 22:45
欢迎来到U3D社区:
Mono Develop脚本编辑器介绍:
Unity3D目前支持三种语言的脚本程序,包括C# JavaScript Boo, 在一个游戏中开发者可以使用一种或者使用多种语言来实现脚本的控制。
三种不同的语言其实效率是相当的,最后都会编译成Unity3D内置的中间代码,目前国内用C#的占大多数。
注意:
- 项目运行过程汇总的修改不会保存。
- 脚本只能依附于游戏对象或由其他脚本调用才能运行。
- 一个脚本可以放在多个游戏对象上面,是多个实例。
- 一个脚本的多个实例和其他脚本之间互不干扰。
脚本在Project中的显示名称不要加cs,类名要和cs名称一致,所有类继承自MonoBehaciour.
项目工程分层设计:
Senes: 存放场景。 Scripts 存放脚本 Rwsources 资源包 Texture 贴图 Materials: 材质
Audios 声音 Models 模型
初始化不要放到构造函数中,而是放到Atart()方法中。
放到游戏对象中的脚本(实例化) 可以在Insepector 中修改属性, Get/set 写法属性不被识别, 直接Public 字段就能当属性用,不写修饰符就是私有private.
创建 克隆 销毁游戏对象
程序创建游戏对象:
GameObject cube= GameObject.CreatePrimitive(Primitive.cube):
cube,name="cube1"://设定名字
cube.renderer.material.color= color.red;
程序克隆对象:
GameObject obj=(GameObject)Instantiate(cube);
程序销毁对象:
Destroy(obj,1);
动态创建出来的对象运行时在Hierarchy中可以看到。
克隆游戏对象昌盛赋值对象的效率高。 比如游戏中产生大量子弹,调用Instantiate来生成对象,Destroy(obj)是立即销毁游戏对象。
动态添加脚本的方法:
(只要把脚本名称传给AddComponent即可)
cube1.AddComponent(”script1“);//吧script1这个脚本加到cube1这个游戏对象上;
Destroy(cube1,GetComponent("script1"))销毁cube1对象上附加的脚本组件实例
1、//给游戏物体添加名为FoobarScript的脚本
GameObject.AddComponent ("FoobarScript");
2、//给游戏物体添加刚体
Rigidbody rb = GameObject.AddComponent ("Rigidbody");
3、//给游戏物体添加球体碰撞器
SphereCollider sc = GameObject.AddComponent ("SphereCollider");
常用核心类:
GameObject类:
本类是游戏对象类,场景中所有的游戏对象都是通过实例化该类来生成的,当你把一个资源放入场景中后,Unity3D就会通过GameObject类来生成对应的游戏对象。
本类包括了游戏对象所需要的属性和方法。
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”);
这个操作比较耗时,把此操作放到Start()中
组件引用函数:
如果要访问的组件不属于常用组件,或者访问的是游戏对象上的脚本(脚本属于自定义组件),可以通过组件引用函数来得到组件的引用。
GetComponent 得到组件
GetComponents 得到组件列表(用于有多个同类型组件的时候)
GetComponentInChildren 得到对象或对象子物体上的组件
ScriptName other = GameObject.GetComponent<ScriptName>();
这个操作比较耗时,把此操作放到Start()中
Time类:
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));
协同程序(Coroutine) :
协同程序,即在主程序运行时同时开启另一段逻辑处理来协同当前程序的执行。换句话说,开启协同程序就是开启一个线程。
在Unity3D中,使用MonoBehaviour.StartCoroutine方法即可开启一个协同程序,也就是说该方法必须在MonoBehaviour或继承于MonoBehaviour的类中调用。
在Unity3D中,使用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秒后");
}
Random类(随机数):
float a=Random.value;
int b=Random.Range(0,100) 包括最大和最小
float c=Random.Range(0.0f,1.0f); 包括最小但不包括最大
消息传递函数:
GameObject.SenMessage: 向自身的脚本中发送消息。
GameObject.BroadcastMessage向自身及物体的脚本发送信息。
GameObject.SenMessageUpwards: 向自身及父物体中发送消息。
Sphere:
void Start () {
gameObject.SendMessageUpwards ("Do","向父对象发出信息");
}
Cube:
void Do(string message){
print (message);
}
更多精彩在http://unity.gopedu.com/forum.php
0 0
- unity
- Unity
- unity
- Unity
- Unity
- Unity
- Unity-----
- unity
- Unity
- unity
- unity
- Unity
- Unity
- Unity
- Unity
- unity
- Unity
- unity
- 手斧Linux – 从LFS到Funtoo (19)
- canny算子的理论分析
- Windows Server 2008 R2 配置Exchange 2010邮件服务器并使用EWS发送邮件
- stdafx.h出错
- 手斧Linux – 从LFS到Funtoo (20)
- Unity
- c++ extern "C"
- Length of Last Word
- C#钩子应用实例
- 几类ARM中断的区别
- Android save img to sqlite
- 不用打开视频、音频文件就能获取视频、音频的时长等属性
- 出现次数超过一半的数
- C语言结构体(struct)常见使用方法