Бааа, промучился весь вечер так нечего не смог сделать. Помогите пожалуйста уже устал вариантов 20 перепробовал как сделать выкладываю два основных скрипта. Первый это скрипт сомалета который мы сбиваем и за его сбитие мы должны получать очки, второй скрипт в который я перенес вывод и типо подсчет очко в но не чего не работает выдает такую ошибку после сбития самолета :NullReferenceException: Object reference not set to an instance of an object bomber.Update () (at Assets/Scripts/bomber.cs:32). Я в принцепе все понял, что он хочет я все исправил и все равно не работает.
Код
using UnityEngine; using System.Collections;
public class bomber : MonoBehaviour {
public GameObject explusen;//партикл для взрыва public float bomberSpeed = 0.05f;//скорст сомалета public int enemy_Heath = 100;//жизни public int bomberDamage = 20;//урон по сомалету public int PointsValue;//количество очков за уничтожение private GameController gameController;
//public AudioClip Explous;//звук взрыва //public AudioClip fly_boart; // Use this for initialization void Start () { GameObject gameControllerObject = GameObject.FindGameObjectWithTag ("GameController"); if (gameControllerObject != null) { gameController = gameControllerObject.GetComponent<GameController>(); } if (gameController == null) { Debug.Log("Нет контролера!!!"); } transform.Rotate(0,90,0); }
using UnityEngine; using UnityEngine.UI; using System.Collections;
public class GameController : MonoBehaviour {
public GameObject Fe1421;//переменая для типа арага public Vector3 spawnValues;//точка респа в пространстве public int hazerdCout;//волны public float spawnWait; public float starWait; public float waveWait;
private int points; public Text point_text;
// Use this for initialization void Start () { points = 0; UpdatePoints (); StartCoroutine(SpawnWave ()); }
// Update is called once per frame void Update () {
}
IEnumerator SpawnWave(){
yield return new WaitForSeconds (starWait); while (true) { for(int i =0; i < hazerdCout; i++){ Vector3 spawnPosition = new Vector3 (spawnValues.x,spawnValues.y,Random.Range(-spawnValues.z, spawnValues.z)); Quaternion spawnRotation = new Quaternion (); Instantiate (Fe1421, spawnPosition, spawnRotation); } yield return new WaitForSeconds(waveWait); } }
public void AddScore(int newPointsValue){ points += newPointsValue; UpdatePoints (); }
pixeye, спасибо гляну и уроки от BZA хоть они уже и устарели. я решил отложить до выходных все, что связано с проектом и переделать систему очков на похожую как PROJECT: SPACE SHOOTER http://www.falcogames.com/SnowCrushSetup.exe
beril, кажется я понял как сделать сейчас попробую переделать
Добавлено (14 июля 2015, 20:54) --------------------------------------------- нет не получится, сделать как я хотел. потому, что не как не получится создать проверку условия уничтожен ли объект в Shoot.
извини еще нет. Я сделал как ты написал но он все равно не работает всеравно пишет Assets/Scripts/bomber.cs(28,65): error CS0103: The name `points' does not exist in the current context. Я прописал не много по другому SootsScr.GetComponent<Shoot>().points += bomberPoints; в таком случаи при уничтожении объекта он выдает такую ошибку NullReferenceException: Object reference not set to an instance of an object bomber.Update () (at Assets/Scripts/bomber.cs:28) http://www.falcogames.com/SnowCrushSetup.exe
Спасибо, что откликнулись код внизу пока не исправлял. Shoot:
Код
using UnityEngine; using UnityEngine.UI; using System.Collections;
public class Shoot : MonoBehaviour {
public GameObject bullet;//переменая для префаба с пулей //public GameObject bulletHole;//след от попадания public GameObject FlashLigth;//вспышка public float delayTime = 0.5f;//темп стрельбы public int ammo = 100;//патронов в бк public int ammo_clip = 5;//патронов в магазине public int points = 0; public Text ammo_text;// всего бк public Text ammo_clip_text;// в магазине public Text point_text;
// Update is called once per frame public void FixedUpdate () { //перезарядка if (ammo_clip >= 0) { FireGun ();//функция стрельбы } else { //Debug.Log("нет патронов в магазине!!!"); ammo_clip_text.text = "0";//чтобы отоброжался 0 а не -1 } if(Input.GetKeyDown(KeyCode.R)){ ammo_clip = 5;//добовляет 5 патронов ammo -= ammo_clip;// отнимает из обшего числа патронов 5 ammo_clip_text.text = "" + ammo_clip.ToString ();//отоброжает значение матронов в магазине снова } }
public void FireGun() { if (Input.GetKey(KeyCode.Mouse0)&&counter > delayTime) { Instantiate(bullet,transform.position,transform.rotation); Instantiate(FlashLigth,transform.position,transform.rotation); ///Destroy(GameObject.FindGameObjectWithTag("FlashLigth")); GetComponent<AudioSource>().Play();// звук выстрела counter = 0; ammo_clip = ammo_clip -1;
public GameObject explusen;//партикл для взрыва public GameObject SootsScr; public float bomberSpeed = 0.05f;//скорст сомалета public int enemy_Heath = 100;//жизни public int bomberDamage = 20;//урон по сомалету private int bomberPoints = 100;//количесво очков за збитие //public AudioClip Explous;//звук взрыва //public AudioClip fly_boart; // Use this for initialization void Start () { //GetComponent<AudioSource> ().clip = fly_boart; transform.Rotate(0,90,0); }
Vip_and_Rip, чет не работает две ошибки вылазят Assets/Scripts/bomber.cs(28,65): error CS0103: The name `points' does not exist in the current context Assets/Scripts/bomber.cs(28,36): error CS0120: An object reference is required to access non-static member `UnityEngine.GameObject.GetComponent(System.Type)'
Всем доброй ночи. Такая проблема есть, у меня есть скрипт Soots в нем по глупости своей прописал подсчет очков и настроил уже UI. И мне нужно из другого скрипта передать значение то есть в shoots есть переменная coin и в нее с друго скрипта с врага нужно передать значение( типо добавить 100 очков), после его уничтожения. Буду очень благодарен за совет, уже 3й день думаю как сделать. http://www.falcogames.com/SnowCrushSetup.exe
Добавлено (05 июля 2015, 19:08) --------------------------------------------- beril, я дописал его немного, правда не пойму еще почему следы от попадания создаются в воздухе особенно если в одно место стреляю
Код
using UnityEngine; using System.Collections;
public class Shoot : MonoBehaviour {
public GameObject bullet;//переменая для префаба с пулей public GameObject bulletHole;//след от попадания public float delayTime = 0.5f;//темп стрельбы
private float counter; // Use this for initialization void Start () {
}
// Update is called once per frame public void FixedUpdate () { FireGun (); }
public void FireGun() { if (Input.GetButtonDown("Fire1")) { Instantiate(bullet,transform.position,transform.rotation); GetComponent<AudioSource>().Play(); counter = 0;
RaycastHit hit; Ray ray = new Ray(transform.position, transform.forward); if(Physics.Raycast(ray,out hit,100f)) { Instantiate(bulletHole, hit.point,Quaternion.FromToRotation(Vector3.up, hit.normal)); } } counter += Time.deltaTime; } }
romeo98, я разобрался, что там было не так правда теперь он постоянно их создает, а не тогда когда кнопку нажимаешь.
Добавлено (05 июля 2015, 17:33) --------------------------------------------- Блин получилось только смену оружия сделать таким оброзом, а стрельбу нет от все время стриляет без нажатия
Добавлено (05 июля 2015, 18:14) --------------------------------------------- Поколупался все равно не могу правильно настроить, теперь можно стрелять правда делает это при любом нажатии на экран как это исправить ?
Привет всем, такая проблема не могу разобраться как сделать стрельбу по нажатию на кнопку на экране. Кнопку я добавил в канвас добавил кней эвент систепу. У меня есть "пушка" которая должна стрелять по нажатию на эту кнопку. Вот скрипт внизу он очень простой.
Код
using UnityEngine; using System.Collections;
public class Shoot : MonoBehaviour {
public GameObject bullet;//переменая для префаба с пулей public float delayTime = 0.5f;//темп стрельбы
private float counter; // Use this for initialization void Start () {
}
// Update is called once per frame void FixedUpdate () { if (Input.GetKey ("Fire")) { Instantiate(bullet,transform.position,transform.rotation); GetComponent<AudioSource>().Play(); counter = 0; } counter += Time.deltaTime; } }
Честно говоря это, то чего мне не хватало когда я попробовал работать с лов. Жду с нетерпением ) особенно если будет собирать под андроид игры http://www.falcogames.com/SnowCrushSetup.exe
Спасибо, я планировал первые 5 уровней сделать втаком цвете другие 5 в другом, сделаю новые сегменты правда еще не знаю в какой цветовой гаме, шарик перерисую ) и я так не смг нормально ссылку вставить на видео не нашел нужные теги для этого и я исправил вид от какого лица
Добавлено (30.08.2014, 17:29) --------------------------------------------- Билд 0.3 от 30.08.2014
Добавлены еще 2 уровня исправлены некоторые баги, изменено название проекта.
Название: Yellow boll Жанр игры: Логическая На каком движке/конструкторе: Unity 3d 4.5 В каком пространстве: 3D Какой вид в игре:от 3го лица Какой Язык Пр. используется в игре: C# Для какой платформы: Windows( возможно Андроид версия) Предоставление исходного кода игры: Не требуется Какой тип лицензии распространения: Не комерческая Сроки разработки: 19.08.2014-31.09.2014 (возможно продление) Сюжет:Вы играете за жёлтый шарик который не понятно как попал в виртуальный мир. Ваша задача пройти все уровни собирая белые коробочки, которые дают вам очки. При этом вам не желательно качаться красных которые отнимают вашу жизнь, также есть желтые которые лечат вас. В команду не кто не требуется игру разрабатываю сам. Это мой первый проект на этом движке в ходе разработки ознакамлеваюсь с его функционалом. Скриншоты:
Обновление 29.08.2014 В игру было добавлено две новые платформы столбы и лезвия (на скриншота) и изменен дизайн шарика (теперь не соответствует названию но ведь проект в разработке !). Били сделаны не большие изменении в скриптах, добавлен еще 1 уровень (теперь их 5).