Я новичок в C# и решил начать использовать его сейчас, так как большинство руководств по Unity сосредоточено на нем, и я никогда не использовал JavaScript для чего-либо, кроме веб-страниц.
По большей части все работало, пока я не попробовал использовать метод Vector2.MoveTowards:
void OnMouseDown() {
int weapCoolDown = 1;
Instantiate(bullet_player);
Vector2.MoveTowards(GameObject.Find("player-1"), Vector2 PointerEventData.position(), float p1BulletSpeed);
}
Ошибки, сообщаемые консолью Unity
Я попытался удалить Vector2, затем он попросил меня добавить EventSystems, но он уже находится внутри UnityEngine. Я исправляю это, а потом он говорит, что этого не существует? Затем я исправляю это, и это дает мне кучу других ошибок, которые я даже не знаю, как удалить.
И когда я пытаюсь использовать вместо этого идентификатор, он присваивает его, но не позволяет мне его использовать, и он, как обычно, говорит «Неожиданный символ».
В руководстве Unity недостаточно подробностей или примеров, которые действительно помогли бы мне решить эту проблему, есть ли класс или ссылка, которые мне не хватает, или мне просто нужно попробовать использовать альтернативный метод?
@Programmer Хорошо, но я думаю, что, поскольку я уже достаточно хорошо знаю JS, я мог бы начать переключаться на него. В C# нет такого же синтаксиса, поэтому мне нужно вообще начать изучать новый язык или снова начать с js. Я пытаюсь придерживаться C#, когда работаю с Unity, потому что большинство видеоуроков, которые я нашел, в основном сосредоточены на нем.
Я не говорю, что вам не следует использовать C#. Я говорю вам, что код в вашем вопросе - это код C#, а не Javascript. Раньше вы могли использовать Unityscript / Javascript, но теперь это снято с производства. У вас нет другого выбора, кроме как изучить C#





Есть несколько вещей, которые вы должны проверить в своем коде:
Vector2.MoveTowards() не вызывается с правильными параметрами. GameObject.Find() вернет gameObject, а не Vector2. Если вы ищете текущую позицию игрока 1, вам следует построить Vector2 из transform.position игрока 1.
Vector2 playerPosition = new Vector2();
playerPosition.x = GameObject.Find("player-1").transform.position.x;
playerPosition.y = GameObject.Find("player-1").transform.position.y;
Любое использование PointerEventData требует директивы using для EventSystem. Чтобы включить его, добавьте using UnityEngine.EventSystem с остальными директивами using.
Префикс Vector2 перед PointerEventData.position() недействителен. Это не явное приведение типов, так как оно не заключено в круглые скобки, но приведение типов не требуется, поскольку position вернет Vector2.
pointerEventData.position - это свойство, основанное на ссылке на объект. Однако реализация PointerEventData.position() неправильно использует это как статический метод. Поскольку на самом деле это не статический метод, а динамическое свойство, он не сможет скомпилировать и отобразить ошибки.
Для существования pointerEventData он должен исходить из события, которое извлекает eventData. К сожалению, OnMouseDown() этого не делает. Однако метод интерфейса из IPointerClickHandler, называемый OnPointerClick(PointerEventData pointerEventData), имеет нужные pointerEventData.
При рефакторинге существующего кода это ближе к той функциональности, которую вы ищете.
// Add this "using" directive
using UnityEngine.EventSystems;
// Be sure to implement the interface of IPointerClickHandler
public class NameOfYourScript : MonoBehaviour, IPointerClickHandler {
//
// Additional Code in your class. . . .
//
// Replace OnMouseDown() with this.
public void OnPointerClick(PointerEventData pointerEventData) {
Instantiate(bullet_player);
Vector2 playerPosition = new Vector2();
playerPosition.x = GameObject.Find("player-1").transform.position.x;
playerPosition.y = GameObject.Find("player-1").transform.position.y;
Vector2.MoveTowards(playerPosition, pointerEventData.position, p1BulletSpeed);
}
}
Код безупречный и без ошибок. Спасибо за помощь, думаю, в следующий раз мне стоит начать использовать JavaScript, поскольку я уже знаю этот язык и все еще новичок в C#.
Напоминаем, что Unity использует специальный вариант JavaScript, также известный как UnityScript, который исторически и до сих пор обычно (но непоследовательно) именуется «JavaScript». UnityScript можно использовать только для создания сценария Unity. Он не совместим с внешними библиотеками JavaScript, поэтому вы не можете импортировать такие вещи, как Node или Threes. См. stackoverflow.com/questions/29194823/unityscript-vs-javascri pt для получения дополнительной информации.
«Я никогда не использовал JavaScript ни для чего, кроме веб-страниц» .... Не уверен, какое это имеет отношение к вашему вопросу. Ваш код - C#. Это не Unityscript. Это не Javascript.