Учебное пособие по Unity Game Engine? - PullRequest
0 голосов
/ 02 марта 2011

Моя игра - 2D RTS, и мне было интересно, знает ли кто-нибудь хороший учебник по Unity или кто-то, хорошо разбирающийся в его синтаксисе, может сказать мне, что я мог сделать неправильно.

Итак, у меня есть объект камеры и объект игрока, оба помечены.У объекта игрока просто есть спрайт, и для него установлено значение solidbody.Сценарий выглядит следующим образом:

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 ]

2 голосов
/ 02 марта 2011

Вы не должны использовать все эти проверки для thisIsPlayer.У вас должны быть отдельные классы для сущности игрока и сущности, не являющейся игроком.

Открытые переменные открываются в редакторе и сериализуются с сущностью при сохранении уровня.Это может означать, что moveSpeed ​​в настоящее время не установлен на то, к чему он инициализирован в этом классе.

Не следует добавлять силу к жесткому телу в методе Update.Есть метод FixedUpdate, который используется для применения физики.Это связано с тем, что обновление вызывается один раз за кадр, независимо от частоты кадров, а FixedUpdate вызывается только через определенные интервалы, поэтому физические силы не зависят от частоты кадров.

Кроме того, не следует пытаться применятьсила и установить положение преобразования того же объекта.Произойдут странные вещи.

Если вы зайдете в Unity Asset Store (доступно в меню «Окно» в Unity), есть раздел «Завершенные проекты», который содержит несколько бесплатных учебников.Я не могу вспомнить, какая из них написана на C #, но даже JavaScript даст вам некоторые идеи о том, как структурировать проект.

0 голосов
/ 03 марта 2011

Не знаю, правильно ли я понял: ваша проблема в том, что ИИ не перемещает его?

если это так, одна проблема может заключаться в том, что вы инициализируете свой

private bool thisIsPlayer = true;

с истиной, но я не вижу никаких условий, устанавливающих его на ложь (войти в режим ai)

только мои 2 цента:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...