U3D[02.21]

来源:互联网 发布:电吉他 知乎 编辑:程序博客网 时间:2024/06/05 03:13

- 音频

audio.PlayOneShot (getSound);//播放一个音频剪辑,必须添加音频源组件AudioSource.PlayClipAtPoint (getSound,transform.position);//在指定位置播放剪辑。播放完成后自动消除音频源。这种方法不需要添加音频源组件

- 修改光源的颜色

public Light doorLight;//doorLight.color = Color.red;

- 对象查找

using UnityEngine;//通过物体名查找某个GameObjectGameObject.Find("powerTxt").GetComponent<GUIText>();GameObject.Find("powerTxt").GetComponent("GUIText") as GUIText;//查找一般放在start函数中,赋值给某个变量,Find是在所有游戏物体中查找,需要遍历,浪费性能,最好不要在update中使用此方法

- 光线投射的碰撞检测

三个参数:射线的起点,方向,碰撞信息,长度如果返回true,hit将包含碰撞的更多信息
    RaycastHit hit;    if (Physics.Raycast (transform.position, transform.forward, out hit, 3))     {       if (hit.collider.transform.tag == "playerDoor")        {              hit.collider.SendMessage ("openMyDoor");        }    }

- SendMessage

cube.SendMessage ("addSum1",10);//执行游戏物体脚本中的指定函数

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

Time.deltaTime

- 播放某个动画

animation.Play ("doorshut");

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

void OnControllerColliderHit(ControllerColliderHit hit)

- 销毁游戏物体,时间参数

Destroy(gameObject,1);

- 游戏物体旋转

transform.Rotate(0,Time.deltaTime * 100,0);////改变物体的旋转方向instance.transform.rotation = Quaternion.Euler(0, 180, 0);

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

void OnTriggerEnter(Collider coll)

- xy方向的移动

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);

- 检查键盘上某个键是否按下

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

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

Transform n = Instantiate(zidan,transform.position,transform.rotation) as Transform;Vector3 fwd = transform.TransformDirection(Vector3.forward);///n.rigidbody.AddForce(fwd * 1000);  过时了n.GetComponent<Rigidbody>().AddForce(fwd * 1000);15.GetComponent<Main>().enabled = false;GameObject.Find ("Plane").GetComponent<Restart>().enabled = true;///将脚本Main禁用///启用Plane物体上的Restart脚本

- 画UI部分都在OnGUI来处理

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");//加载关卡        }}

- 加载一个纹理

///transform.renderer.material.mainTexture = Resources.Load("0") as Texture;过时了transform.GetComponent<Renderer>().material.mainTexture = Resources.Load("0") as Texture;//或者render = (Renderer)instance.GetComponent("Renderer");render.material.mainTexture = (Texture)Resources.Load("0");

- 加载文件夹里的序列图,存放到一个数组中。

注意:juse为文件夹名,必须放到Resources文件夹下

private Object[] anim;anim = Resources.LoadAll ("juese");

- 修改文字字体

//要修改文字字体,可以创建一个GUISKIN,在这个GUISKIN中修改字体,然后GUI.skin = mySkin;GUI.color = Color.red//文本颜色

- 让序列图动起来

//--------------------动画开始---------------------------------  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;          }  }//--------------------动画结束---------------------------------

- 文本

userName = GUI.TextField (new Rect(400,70,200,30),userName,10);///输入文本pwd = GUI.PasswordField(new Rect(400,100,200,30),pwd,"*"[0],20);///密码文本

- 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);}

- 通知游戏主线程等待

///WaitForSeconds()用于通知游戏主线程等待。一定要将该方法返回类型修改IEnumerator                Debug.Log ("开始等待:" + Time.time);                yield return new WaitForSeconds (3);                Debug.Log ("结束等待:" + Time.time);

- 随机数

可以随机整数和浮点数

int a = Random.Range (0,100);float b = Random.Range (10.0f,100.0f);

- FixedUpdate

Update会在每次渲染新的一帧时,被调用。
而FixedUpdate会在每个固定的时间间隔被调用,FixedUpdate则不受帧率的变化,它是以固定的时间间隔来被调用,那么这个时间间隔怎么设置呢?
Edit->Project Setting->time下面的Fixed timestep。所以处理Rigidbody的时候最好用FixedUpdate。

- 在unity中添加新的菜单

using UnityEditor;[MenuItem ("新的菜单/fuck")]static void DoSomething () {        Debug.Log ("Perform operation");}

- 抗锯齿

在3D渲染过程中,可能会出现锯齿。为什么会出现锯齿呢?因为它为了运行效率而牺牲了渲染效果,锯齿越多说明渲染效率越快。
Edit-ProjectSettings—Quality Anti Aliasing设置抗锯齿

- 摄像机

Camera.active = true;false

- 刚体 Rigibody

Mass 质量,数值越大物体下落的越快。Drag 阻力,Use Gravity是否使用重力Is Kinematic是否受物理的影响

- 碰撞与休眠

刚体与物体之间是存在碰撞的。刚体的碰撞分为三种:进入碰撞、碰撞中、碰撞结束。
休眠可以理解为让模型变为静止状态。

OnCollisionEnter();///开始接触时,立刻调用此方法OnCollisionStay();///碰撞的过程中,每帧都会调用,知道碰撞结束OnCollistionExit();///停止接触

- 碰撞器

游戏对象需要感应碰撞,必须给其添加碰撞器:
Box Collider 盒子碰撞器
Sphere Collider 球体碰撞器
Capsule Collider 胶囊碰撞器
Mesh Collider 网格碰撞器
Wheel Collider 车轮碰撞器

- 碰撞

刚体Rigibody 碰撞体Collider 触发器 is Trigger

碰撞体是物理组件的一类,它要与刚体一起添加到游戏对象上才能发生碰撞。
碰撞的双方中一定要有一个有刚体组件存在,并且双方必有碰撞体组件。

刚体必须在主体上,is Trigger可以是二者之一
is Trigger 开启时,触发事件
关闭时,碰撞事件

下面的参数都表示对方

触发信息检测:
1.MonoBehaviour.OnTriggerEnter( Collider other )当进入触发器
2.MonoBehaviour.OnTriggerExit( Collider other )当退出触发器
3.MonoBehaviour.OnTriggerStay( Collider other )当逗留触发器

碰撞信息检测:
1.MonoBehaviour.OnCollisionEnter( Collision collisionInfo ) 当进入碰撞器
2.MonoBehaviour.OnCollisionExit( Collision collisionInfo ) 当退出碰撞器
3.MonoBehaviour.OnCollisionStay( Collision collisionInfo ) 当逗留碰撞器

发生碰撞的主体一定是要带刚体的,即只有带刚体的碰撞体去撞其他碰撞体时,双方才会收到碰撞事件,以下是实验:
一、控制A(刚体加碰撞体)撞击 静止的B(只有碰撞体),双方能收到碰撞事件。
二、控制B(只有碰撞体)撞击 静止的A(刚体加碰撞体),双方收不到碰撞事件。
三、让A(刚体加碰撞体)自由下落,然后控制B(只有碰撞体)去撞击A,双方能受到碰撞事件。

得出的结论似乎是如果碰撞双方只有一个有刚体,那么那个刚体一定要处于运动的状态下才会有碰撞事件发生。

收到触发事件,必须满足如下三个条件:
1、必须都要有碰撞器组件(Collider),其实上面的碰撞事件同样也需要这个前提条件。
2、必须有一个物体带刚体组件,并且处于运动状体中(包括主动运动去撞击别人和在运动过程中被别人撞击)。
3、两个碰撞器中至少有一个开启了IsTrigger。

一、开启IsTrigger那个物体会被物理引擎锁忽略掉,所以会产生两个物体穿越的情况。
二、两个对象要么都收到碰撞事件,要么都收到触发事件,不会出现一个收到触发事件,一个收到碰撞事件的情况。

3.碰撞器和触发器的区别?
碰撞器(Collider)有碰撞效果,isTrigger= false;可以调用OnColliderEnter/Stay/Exit。
触发器没有碰撞效果,isTrigger= true; 一个触发器不会碰撞刚体,当一个刚体进入或者退出触发器时,将发送:OnTriggerEnter/Stay/Exit。
4.碰撞发生的必要条件?
两个物体必须带有碰撞器(Collider),一个物体还必须带有刚体(RigidBody)或则角色控制器(CharacterController,自带胶囊碰撞器,已经封装了一个刚体在里面)。

0 0