U3D[02.21]

- 音頻

audio.PlayOneShot (getSound);
//播放一個音頻剪輯,必須添加音頻源組件
AudioSource.PlayClipAtPoint (getSound,transform.position);
//在指定位置播放剪輯。播放完成後自動消除音頻源。這種方法不需要添加音頻源組件

- 修改光源的顏色

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

- 對象查找

using UnityEngine;
//通過物體名查找某個GameObject
GameObject.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,自帶膠囊碰撞器,已經封裝了一個剛體在裏面)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章