aser自学u3d一段时间的总结


1.audio.PlayOneShot (getSound);

播放一个音频剪辑,必须添加音频源组件

AudioSource.PlayClipAtPoint (getSound,transform.position);

在指定位置播放剪辑。播放完成后自动消除音频源。这种方法不需要添加音频源组件

2.修改光源的颜色

public Light doorLight;

doorLight.color = Color.red;

3.通过物体名查找某个GameObject

GameObject.Find ("powerTxt").GetComponent <GUIText>();

GameObject.Find("powerTxt").GetComponent("GUIText") as GUIText;

查找一般放在start函数中,赋值给某个变量,Find是在所有游戏物体中查找,需要遍历,浪费性能,最好不要在update中使用次方法

4.光线投射,用于碰撞检测

RaycastHit hit;

if (Physics.Raycast (transform.position, transform.forward, out hit, 3)) {

if (hit.collider.transform.tag == "playerDoor") {

hit.collider.SendMessage ("openMyDoor");

}

}

三个参数:射线的起点,方向,碰撞信息,长度

如果返回true,hit将包含碰撞的更多信息

5.SendMessage

cube.SendMessage ("addSum1",10);

执行游戏物体脚本中的指定函数

6.Time.deltaTime

以秒计算,完成每一帧的时间

7.animation.Play ("doorshut");

播放某个动画

8.void OnControllerColliderHit(ControllerColliderHit hit)

角色控制的碰撞检测。在移动的时,当controller碰撞到collider时OnControllerColliderHit被调用。

9.Destroy(gameObject,1);

销毁游戏物体,时间参数

10.transform.Rotate (0,Time.deltaTime * 100,0);

游戏物体旋转

11.void OnTriggerEnter(Collider coll)

触发碰撞,需要将is Trigger选中

12.moveDir = new Vector3(Input.GetAxis("Horizontal"),0,Input.GetAxis("Vertical"));

xy方向的移动

同上

float x = Input.GetAxis("Horizontal") * Time.deltaTime * speed;

float z = Input.GetAxis("Vertical") * Time.deltaTime * speed;

transform.Translate(x,0,z);

13.检查键盘上某个键是否按下

Input.GetKey(KeyCode.W)  按下返回true

14.复制一个预设,添加力,让其物理运动

Transform n = Instantiate(zidan,transform.position,transform.rotation) as Transform;

Vector3 fwd = transform.TransformDirection(Vector3.forward);

n.rigidbody.AddForce(fwd * 1000);

15.GetComponent<Main>().enabled = false;

GameObject.Find ("Plane").GetComponent<Restart>().enabled = true;

将脚本Main禁用

启用Plane物体上的Restart脚本

16.

void OnGUI(){

if (GUI.Button(new Rect(500, 250, 80, 40), "退出"))//创建文本按钮

{

Application.Quit();//退出应用

}

if (GUI.Button(new Rect(300, 250, 80, 40), "开始"))

{

Application.LoadLevel("01");//加载关卡

}

画UI部分都在OnGUI来处理

17.transform.renderer.material.mainTexture = Resources.Load("0") as Texture;

加载一个纹理

18.private Object[] anim;

anim = Resources.LoadAll ("juese");

加载文件夹里的序列图,存放到一个数组中。注意:juse为文件夹名,必须放到Resources文件夹下

19.要修改文字字体,可以创建一个GUISKIN,在这个GUISKIN中修改字体,然后GUI.skin = mySkin;

GUI.color = Color.red//文本颜色

20.让序列图动起来

//--------------------动画开始---------------------------------

GUILayout.Label ("当前播放第" + nowFram + "帧");

GUI.DrawTexture(new Rect(10,150,80,100),(anim[nowFram] as Texture),ScaleMode.StretchToFill,true,0);

time += Time.deltaTime;

if (time >= 1.0 / fps) {

nowFram++;

time = 0;

if(nowFram >= totalFram)

{

nowFram = 0;

}

}

//--------------------动画结束---------------------------------

21.userName = GUI.TextField (new Rect(400,70,200,30),userName,10);

输入文本

pwd = GUI.PasswordField(new Rect(400,100,200,30),pwd,"*"[0],20);

密码文本

22.C#和js互相调用

首先删掉#pragma strict严谨编译模式

js文件放在Plugins中

首先编译Plugins中的代码

然后Editor

最后其它代码

js代码

function OnGUI()

{

if(GUI.Button(Rect(100,200,100,50),"js调用c#"))

{

var cs  = GetComponent("TestCS");

cs.CallMe("js调用c#");

}

}

public function CallMe(tmp:String)

{

Debug.Log(tmp);

}

c#代码

void OnGUI(){

if(GUI.Button(new Rect(100,100,100,50),"C#调用js"))

{

TestJS js = (TestJS)GetComponent("TestJS");

js.CallMe("C#调用js");

}

}

public void CallMe(string temp){

Debug.Log(temp);

}

23.WaitForSeconds()用于通知游戏主线程等待。一定要将该方法返回类型修改IEnumerator

Debug.Log ("开始等待:" + Time.time);

yield return new WaitForSeconds (3);

Debug.Log ("结束等待:" + Time.time);

24.随机数,可以随机整数和浮点数

int a = Random.Range (0,100);

float b = Random.Range (10.0f,100.0f);

25.Update会在每次渲染新的一帧时,被调用。

而FixedUpdate会在每个固定的时间间隔被调用,FixedUpdate则不受帧率的变化,它是以固定的时间间隔来被调用,那么这个时间间隔怎么设置呢?

Edit->Project Setting->time下面的Fixed timestep。所以处理Rigidbody的时候最好用FixedUpdate。

26.在unity中添加新的菜单

using UnityEditor;

[MenuItem ("新的菜单/fuck")]

static void DoSomething () {

Debug.Log ("Perform operation");

}

27.抗锯齿

在3D渲染过程中,可能会出现锯齿。为什么会出现锯齿呢?因为它为了运行效率而牺牲了渲染效果,锯齿越多说明渲染效率越快。

Edit-ProjectSettings—Quality  Anti Aliasing设置抗锯齿

28. 摄像机

Camera.active = true;false

29.刚体  Rigibody

Mass 质量,数值越大物体下落的越快。

Drag 阻力,

Use Gravity是否使用重力

Is Kinematic是否受物理的影响

30.碰撞与休眠

刚体与物体之间是存在碰撞的。刚体的碰撞分为三种:进入碰撞、碰撞中、碰撞结束。

休眠可以理解为让模型变为静止状态。

OnCollisionEnter():开始接触时,立刻调用此方法

OnCollisionStay():碰撞的过程中,每帧都会调用,知道碰撞结束

OnCollistionExit():停止接触

31.游戏对象需要感应碰撞,必须给其添加碰撞其。

碰撞器:

Box Collider 盒子碰撞器

Sphere Collider 球体碰撞器

Capsule Collider 胶囊碰撞器

Mesh Collider 网格碰撞器

Wheel Collider 车轮碰撞器