2011-03-02 235 views
-3

我的遊戲是2D RTS,我想知道是否有人知道Unity的優秀教程,或者如果有人熟悉它的語法可以告訴我我可以做錯什麼。Unity遊戲引擎教程?

所以,我有我的相機對象和我的播放器對象,都標記。玩家對象只有一個精靈,並被設置爲剛體。該腳本去如下:

using UnityEngine; 
using System.Collections; 

public class AIsciript : MonoBehaviour 
{ 
private bool thisIsPlayer = true; 
private GameObject objPlayer; 
private GameObject objCamera; 

//input variables (variables used to process and handle input) 
private Vector3 inputRotation; 
private Vector3 inputMovement; 

//identity variables (variables specific to the game object) 
public float moveSpeed = 100f; 

// calculation variables (variables used for calculation) 
private Vector3 tempVector; 
private Vector3 tempVector2; 

// Use this for initialization 
void Start() 
{ 
    objPlayer = (GameObject)GameObject.FindWithTag("Player"); 
    objCamera = (GameObject)GameObject.FindWithTag("MainCamera"); 
    if (gameObject.tag == "Player") 
    { 
     thisIsPlayer = true; 
    } 
} 

// Update is called once per frame 
void Update() 
{ 
    FindInput(); 
    ProcessMovement(); 
    if (thisIsPlayer == true) 
    { 
     HandleCamera(); 
    } 
} 

void FindInput() 
{ 
    if (thisIsPlayer == true) 
    { 
     FindPlayerInput(); 
    } 
    else 
    { 
     FindAIInput(); 
    } 
} 
void FindPlayerInput() 
{ 
    //find vector to move 
    inputMovement = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); 

    //find vector to the mouse 
    tempVector2 = new Vector3(Screen.width * 0.5f, 0, Screen.height * 0.5f); 

    // the position of the middle of the screen 
    tempVector = Input.mousePosition; 

    // find the position of the mouse on screen 
    tempVector.z = tempVector.y; 

    tempVector.y = 0; 
    Debug.Log(tempVector); 
    inputRotation = tempVector - tempVector2; 
} 
void FindAIInput() 
{ 

} 
void ProcessMovement() 
{ 
    rigidbody.AddForce(inputMovement.normalized * moveSpeed * Time.deltaTime); 
    objPlayer.transform.rotation = Quaternion.LookRotation(inputRotation); 
    objPlayer.transform.eulerAngles = new Vector3(0, transform.eulerAngles.y + 180, 0); 
    objPlayer.transform.position = new Vector3(transform.position.x, 0, transform.position.z); 
} 
void HandleCamera() 
{ 
    objCamera.transform.position = new Vector3(transform.position.x, 15, transform.position.z); 
    objCamera.transform.eulerAngles = new Vector3(90, 0, 0); 
} 
} 

我只是想我會張貼代碼以防萬一,但我想這可能不是問題,因爲我試圖迫使它在Start()移動和什麼都沒有發生。

回答

2

您不應該對thisIsPlayer使用所有這些檢查。你應該爲玩家實體和非玩家實體分別分類。

公共變量暴露在編輯器中,並在保存級別時與實體進行序列化。這可能意味着moveSpeed目前沒有設置爲它在此課程中初始化的內容。

您不應該在Update方法中將力加到剛體上。有一個FixedUpdate方法用於應用物理。這是因爲每幀調用Update一次,無論幀速率如何,固定更新僅以特定間隔調用,因此物理力不受幀速率的影響。

此外,您不應該嘗試應用強制並設置相同對象的轉換位置。奇怪的事情會發生。

如果您進入Unity資源存儲(Unity內的Window菜單提供),則會有一個名爲「完整項目」的部分,其中包含一些免費教程。我不記得他們中的哪些是用C#編寫的,但即使是JavaScript也會給你一些關於如何構建項目的想法。

+0

哦,和Unity論壇(http://forum.unity3d.com/)有一個腳本部分可能會得到比StackOverflow更快的Unity問題響應。 – Calvin 2011-03-02 05:18:41

0

我不知道我是否理解正確:你的問題是它不被AI移動?

,如果是這樣的話,一個問題可能是你初始化

private bool thisIsPlayer = true; 

與真實的,但我看不到任何條件設置爲false(進入AI模式)

只是我的2美分:)