Всем доброй ночи. Такая проблема есть, у меня есть скрипт Soots в нем по глупости своей прописал подсчет очков и настроил уже UI. И мне нужно из другого скрипта передать значение то есть в shoots есть переменная coin и в нее с друго скрипта с врага нужно передать значение( типо добавить 100 очков), после его уничтожения. Буду очень благодарен за совет, уже 3й день думаю как сделать. http://www.falcogames.com/SnowCrushSetup.exe
Если позволяет ситуация, можно попробовать назначить объект с Shoots через public в этом самом другом скрипте, и там уже проводить с ним манипуляции. Больше никогда не буду делать игры.
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)'
Добавлено (13 июля 2015, 22:30) --------------------------------------------- хотя бы с теми местами (и указанием методов Start, Update), где объявляются coins и откуда вызываешь GetComponent<Shoot>
Посмотри мое видео по GetComponent Или это из справки Или официальное видео по работе с GetComponent на сайте Unity. Думаю все вопросы отпадут сами собой
ЦитатаFlow ()
eamanа как-же тогда? Уж-ли не GameObject.GetComponent("shoots").coin; ? x3
Все seaman правильно говорит, он не верно написал. GameObject.GetComponent<Shoot>.points = points + bomberPoints; => gameObject.GetComponent<Shoot>().points = points + bomberPoints;
Спасибо, что откликнулись код внизу пока не исправлял. 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); }
извини еще нет. Я сделал как ты написал но он все равно не работает всеравно пишет 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
Я сделал как ты написал но он все равно не работает всеравно пишет 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)
ну само собой ) надо go.GetComponent<Shoot>().points += bomberPoints;
Уничтожение какого обьекта. Если Shoot, то само собой будет выдавать.
beril, кажется я понял как сделать сейчас попробую переделать
Добавлено (14 июля 2015, 20:54) --------------------------------------------- нет не получится, сделать как я хотел. потому, что не как не получится создать проверку условия уничтожен ли объект в Shoot.
if(go) это сокращенное от if(go==true) , т.е. существует ли объект go, к скрипту которого обращаемся
Код
using UnityEngine; using System.Collections;
public class bomber : MonoBehaviour {
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; public GameObject go;//ПЕРЕТАЩИ СВОЙ ОБЪЕКТ СО СКРИПТОМ Shoot // Use this for initialization void Start () { //GetComponent<AudioSource> ().clip = fly_boart; transform.Rotate(0,90,0); }
p.s. othen, othen, ну давай у листьев спросим... где он май, че-то-там май http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг VKонтакте 3Dbuffer