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 车轮碰撞器