public class MainMenu : MonoBehaviour { public int Mm_current; public string Mm_Game; private Rect Mm_mmbox_rect = new Rect(Screen.width/2-69,Screen.height/2-100,138,300); private Rect Mm_1button_rect = new Rect(Screen.width/2-64,Screen.height/2-64,128,64); private Rect Mm_2button_rect = new Rect (Screen.width/2-64,Screen.height/2,128,64); private Rect Mm_3button_rect = new Rect (Screen.width/2-64,Screen.height/2+64,128,64); private Rect Mm_4button_rect = new Rect (Screen.width/2-64,Screen.height/2+128,128,64);
Подскажите, пожалуйста, почему выдает ошибку" NullReferenceException: Object reference not set to an instance of an object UnityEngine.GUI.Box (Rect position, System.String text) (at C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/GUI.cs:365) MainMenu.Main () (at Assets/MainMenu.cs:30)" ? При запуске игры. Как я понимаю, он считает, что кнопка не загружена. Как ее можно загрузить? При этом все отлично функционирует.
Как я понимаю, он считает, что кнопка не загружена.
Да, она не загружена. Почему? В C# есть ключевый слова (например, int, public), которыми нельзя называть переменные и т.д. Но также есть и ключевая функция Main(), она вызывается при запуске скрипта (не путать с Awake() и Start() - это функции от Unity). Выходит, что твоя функция Main() вызывается раньше всего остального, а значит кнопка не может быть загружена. Решение: Переименуй функцию. Расширения для Unity3D Блог программиста - PoqXert.ru
Можно ли с помощью двухмерных джойнтов симулировать эффект трэйла? Хочу сделать подобие змейки. Пробовал с помощью DistanceJoint, но там, если дистанция между двумя элементами меньше заданной, то второй элемент в принципе не двигается, а за ним не двигаются и остальные. Мне же нужно, чтобы каждый элемент повторил путь предыдущих. Когда-то тут будут ссылки на крутые проекты. Или нет.
private Rect Mm_mmbox_rect = new Rect(Screen.width/2-69,Screen.height/2-100,138,300); private Rect Mm_1button_rect = new Rect(Screen.width/2-64,Screen.height/2-64,128,64); private Rect Mm_2button_rect = new Rect (Screen.width/2-64,Screen.height/2,128,64); private Rect Mm_3button_rect = new Rect (Screen.width/2-64,Screen.height/2+64,128,64); private Rect Mm_4button_rect = new Rect (Screen.width/2-64,Screen.height/2+128,128,64);
Как вращать объект по оси Y Z когда зажата левая кнопка мыши на объекте с тегом "Button_Rotation"? Вот так делаю проверку на нажатие и проверки по тегу,
Код
void Update() {
if (Input.GetMouseButtonDown (0)) { //если нажата левая кнопка мыши (тапнули пальцем на андроиде/айосе), то RaycastHit hit; //создаем новую точку соприкосновения луча (назовем это так, хотя возможно правильно это обозвать подругому) Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition); //и сам луч, который будет направлен от курсора мыши вглубь экрана if (Physics.Raycast (ray, out hit, Mathf.Infinity)) { //если созданный луч соприкоснулся с объектом if (hit.collider.name == "Button_Rotation") { Debug.Log ("Rotation");
Подскажите пожалуйста, как программно отключить скрипт в юнити? В скрипт референс не нашел функции. Скрипт висит на объекте, сам объект отключать не вариант, как и делать пустой дочерний.
Laush, чтобы поворот был плавным, умножай его на Time.deltaTime. Про кватернионы почитай у ПогКсерта и на хабре статья "Каверзные кватернионы". Voresh, ну вот так наппример:
Код
public MyScript myScript; // в эту ячейку перетянешь в редакторе объект с нужным тебе скриптом
NEBR, Умножал, та же ситуация, работает только единожды... Если сделать без проверки на нажатие и повесить на объект который нужно вращать, то конечно вращает. А с этой проверкой не хочет. Что делать.... Вот смотри
Код
using UnityEngine; using System.Collections;
public class RotationCar : MonoBehaviour {
void Update() {
if (Input.GetMouseButtonDown (0)) { //если нажата левая кнопка мыши (тапнули пальцем на андроиде/айосе), то RaycastHit hit; //создаем новую точку соприкосновения луча (назовем это так, хотя возможно правильно это обозвать подругому) Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition); //и сам луч, который будет направлен от курсора мыши вглубь экрана if (Physics.Raycast (ray, out hit, Mathf.Infinity)) { //если созданный луч соприкоснулся с объектом if (hit.collider.name == "Button_Rotation") { Debug.Log ("Rotation"); transform.Rotate(10*Time.deltaTime,0,0); }
Вы уверены, что вам стоит программировать? Это просто пример класса, там могло быть любое название. Кстати, скрипт также можно отключать через enabled, правда, он просто не будет обновляться через Update (другие функции будут работать). Когда-то тут будут ссылки на крутые проекты. Или нет.
if (Input.GetMouseButtonDown (0)) можно заменить на (myTouch.phase = TouchPhase.Began) - нажали один раз if (Input.GetMouseButton (0)) можно заменить на (myTouch.phase = TouchPhase.Stationary) - удерживаем палец на экране
ЦитатаVoresh ()
NEBR, Что за тип такой, MyScript? У меня такого нету.
да, выше верно сказали что это название класса. Так должен называтся тот скрипт, который нужно отключить King Size #Gamiron12
Объясните мне, как нормально работают LookRotation и FromToRotation в 2D играх, а то эти функции вообще неадекватно себя ведут. Как и LookAt. Какие еще есть методы повернуть спрайт к необходимому трансформу для 2D игры?
И еще вопрос: навесил на "врага" скрипт
Код
private Transform player; public float speed = 4; // Use this for initialization void Start () { player = GameObject.FindGameObjectWithTag ("Player").transform; }
// Update is called once per frame void Update () { transform.rotation = Quaternion.FromToRotation (transform.position, player.position); rigidbody2D.velocity = transform.up * speed; //Debug.Log (rigidbody2D.velocity); }
Ладно еще, с учетом первого вопроса, враг не поворачивается к игроку, но я абсолютно не могу понять, почему враг при этом тупо стоит на месте. При этом, в логе rigidbody2D.velocity не равно нулю. Мистика. Когда-то тут будут ссылки на крутые проекты. Или нет.