2014-01-09 22 views
0

所以我有幾個對象,當我點擊一個對象時,攝像機放大並移動到該對象。然後,我點擊該物體,攝像機移動到另一個物體所在的另一個座標上。但是,我希望用戶追溯到原始對象,然後返回到相機的初始位置。所以,我正在考慮實施雙擊以讓相機回到原來的位置。如何實現雙擊功能以將相機移回到之前的位置?

我試圖尋找一個雙擊引用,我試圖將這個腳本附加到我的對象。然而,沒有任何反應,我不知道爲什麼。我甚至將相機設置爲主相機。

using UnityEngine; 
using System.Collections; 

public class DoubleClickBack : MonoBehaviour {  
    public Camera mainCam;  
    float doubleClickStart = 0; 

    void CheckDoubleClick() { 

    void OnMouseUp() {  
     if ((Time.time - doubleClickStart) < 0.3f) { 
      this.OnDoubleClick();  
      doubleClickStart = -1;  
     } 
     else {  
      doubleClickStart = Time.time; 
     } 
    } 
} 

    void OnDoubleClick() { 
     Debug.Log("Double Clicked!");  
     mainCam.transform.position = new Vector3(0, 1, -7);  
     Camera.main.orthographicSize = 0.4f; 
    }  
} 

我甚至試圖在下面實現空格鍵的方法,也沒有任何反應。我想知道我做錯了什麼。除了腳本,動畫製作者和盒子對撞機之外,還應該在檢查器窗口中附加對象嗎?

using UnityEngine; 
using System.Collections; 

public class SpaceMove : MonoBehaviour {  
    public Camera mainCam; 
    void CheckSpace() { 
     if (Input.GetKeyDown("space")) 
      print("space key was pressed"); 

     mainCam.transform.position = new Vector3(0, 1, -8);   
     Camera.main.orthographicSize = 0.4f; 
    } 
} 

回答

0

我想通了,我的問題。我忘記了在Update()中調用函數。下面是萬一有人的解決方案感興趣:

這是我目前已運行:

using UnityEngine; 
using System.Collections; 

public class DoubleClickBack : MonoBehaviour {  
public Camera mainCam;  
float doubleClickStart = 0; 

void CheckDoubleClick() { 

void OnMouseUp() {  
    if ((Time.time - doubleClickStart) < 0.3f) { 
     this.OnDoubleClick();  
     doubleClickStart = -1;  
    } 
    else {  
     doubleClickStart = Time.time; 
    } 
} 
} 

void OnDoubleClick() { 
    Debug.Log("Double Clicked!");  
    mainCam.transform.position = new Vector3(0, 1, -7);  
    Camera.main.orthographicSize = 0.4f; 
}  
} 

而且,我改變Input.GetMouseButtonDown(0)至Input.GetMouseButtonUp(0)。

0

這不叫OnMouseUp(),這意味着這些可能發生的:

  • OnMouseUp()調用連接到所收到的點擊對象的腳本,所以你可能已經忘了將該腳本添加到該特定對象;
  • 被點擊的對象沒有碰撞器。

因爲這是你可能希望把它與許多對象工作的功能,也許你想使它工作的任何點擊,即使不打任何東西。這是你如何能做到這一點,如果你想讓它總是工作,其優點是不需要附加到每一個對象,只有一個一個例子:

void Update() 
{ 
    if (Input.GetMouseButtonUp(0)) 
    { 
     Debug.Log("Pressed left click."); 
     CheckDoubleClick(); 
    } 

    if (Input.GetMouseButtonUp(1)) 
    { 
     Debug.Log("Pressed right click."); 
     CheckDoubleClick(); 
    } 

    if (Input.GetMouseButtonUp(2)) 
    { 
     Debug.Log("Pressed middle click."); 
     CheckDoubleClick(); 
    } 
} 

private void CheckDoubleClick() 
{ 
    if ((Time.time - doubleClickStart) < 0.3f) 
    { 
     this.OnDoubleClick(); 
     doubleClickStart = -1; 
    } 
    else 
    { 
     doubleClickStart = Time.time; 
    } 
}