forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   Активация скрипта по требованию (http://forum.boolean.name/showthread.php?t=19162)

CostUm 12.05.2014 19:58

Активация скрипта по требованию
 
Всем здрасте, назрел вопрос указанный в теме, пытаюсь сделать скрипт С#, который по нужному требованию активирует другой скрипт. Написал что-то вроде этого

Цитата:

using UnityEngine;
using System.Collections;

public class BlurEf : MonoBehaviour {


void Start ()
{
if (Input.GetMouseButtonDown(0))
{
GameObject.Find("Main Camera").GetComponent<BlurEffect>().enabled = true;
}
}
При запуске игры говорит мол нужно всё пофиксить прежде чем играть, однако я понятия не имею что тут зафиксить можно) Прошу вашей помощи.

CostUm 12.05.2014 20:17

Re: Активация скрипта по требованию
 
заметил, что забыл скобку закрыть), но тем не менее закрыв её ничего не работает, почему?

dsd 12.05.2014 20:23

Ответ: Активация скрипта по требованию
 
в консоли оно пишет обычно ошибки и указывает фаил строку и символ где ошибка, а также пишет что за ошибка

если по ошибке пару раз клацнуть откроет фаил с ошибкой и поставит курсор в место ошибки.

CostUm 12.05.2014 20:26

Re: Активация скрипта по требованию
 
у меня в консоле ошибку показывал, но не указывал, но я нашёл её сам, поставив дополнительную скобку. Теперь ошибок нет, и ничего не работает, может скрипт корявый

dsd 12.05.2014 20:36

Ответ: Активация скрипта по требованию
 
http://docs.unity3d.com/Documentatio...nce/Debug.html ну хз.

CostUm 12.05.2014 20:47

Re: Активация скрипта по требованию
 
не браза, ты чё то ваще не помог

CostUm 12.05.2014 20:50

Re: Активация скрипта по требованию
 
всё, сам разобрался!
но назрел дополнительный вопрос, как можно сделать задержку включения например на пару секунд? т.е клацнул мышь, 2 секунды и скрипт активируется

pax 12.05.2014 23:00

Ответ: Re: Активация скрипта по требованию
 
Цитата:

Сообщение от CostUm (Сообщение 280549)
всё, сам разобрался!
но назрел дополнительный вопрос, как можно сделать задержку включения например на пару секунд? т.е клацнул мышь, 2 секунды и скрипт активируется

Как-то так

PHP код:

using UnityEngine;
using System.Collections;    

public class 
BlurEf MonoBehaviour {

public 
float delay 0.5f;

void Start ()
{
  if (
Input.GetMouseButtonDown(0))
  {
     
StartCoroutine(ActivateCoroutine());
  }

}

IEnumerator ActivateCoroutine(){
   yield return new 
WaitForSeconds(delay);
  
Camera.main.GetComponent<BlurEffect>().enabled true;
}




CostUm 13.05.2014 00:16

Re: Активация скрипта по требованию
 
А можно в скрипте C# отключить Java, и наоборот? Или только однородные?

pax 13.05.2014 07:27

Ответ: Re: Активация скрипта по требованию
 
Цитата:

Сообщение от CostUm (Сообщение 280578)
А можно в скрипте C# отключить Java, и наоборот? Или только однородные?

можно

EvilOkta 13.05.2014 10:11

Ответ: Re: Активация скрипта по требованию
 
Цитата:

Сообщение от CostUm (Сообщение 280549)
всё, сам разобрался!

Расскажи как, а то у меня схожая проблема получилась. В синтаксисе проблема?

pax 13.05.2014 10:40

Ответ: Активация скрипта по требованию
 
У него нет закрывающей } для класса в приведенном примере.

EvilOkta 13.05.2014 11:45

Ответ: Активация скрипта по требованию
 
Цитата:

Сообщение от pax (Сообщение 280623)
У него нет закрывающей } для класса в приведенном примере.

так он же пишет
Цитата:

заметил, что забыл скобку закрыть), но тем не менее закрыв её ничего не работает, почему?
то есть еще где-то косяк ))

impersonalis 13.05.2014 15:16

Ответ: Re: Активация скрипта по требованию
 
Цитата:

Сообщение от CostUm (Сообщение 280540)
закрыв её ничего не работает

>>:(

Антихрист 13.05.2014 17:36

Ответ: Активация скрипта по требованию
 
У него условие нажатия в starte

pax 13.05.2014 17:51

Ответ: Активация скрипта по требованию
 
Цитата:

Сообщение от Антихрист (Сообщение 280658)
У него условие нажатия в starte

А я скопировал его код даже не посмотрев)

CostUm 13.05.2014 20:50

Re: Активация скрипта по требованию
 
поставил условие на Update, тем самым проблема разрешилась.
ну если можно отключить через С# скрипт Java и наоборот, не соизволите ли вы поделиться своими знаниями со мной, pax

pax 13.05.2014 22:06

Ответ: Активация скрипта по требованию
 
Примерно так:
PHP код:

(gameObject.GetComponent("ИмяСкриптаНаJS") as MonoBehaviour).enabled false


CostUm 13.05.2014 22:18

Re: Активация скрипта по требованию
 
почему то не помогло
Цитата:

The type or namespace name `тут мой Java скрипт' could not be found. Are you missing a using directive or an assembly reference?

pax 13.05.2014 23:44

Ответ: Активация скрипта по требованию
 
Ну впиши имя скрипта для отключения, не тупи. Зачем писать "тут мой Java скрипт"

CostUm 15.05.2014 01:01

Re: Ответ: Активация скрипта по требованию
 
Цитата:

Сообщение от pax (Сообщение 280704)
Ну впиши имя скрипта для отключения, не тупи. Зачем писать "тут мой Java скрипт"

ты типо шутканул? ну теперь посмейся

Антихрист 15.05.2014 03:37

Ответ: Активация скрипта по требованию
 
Скилла твоего никто не знает,да, и обычно если что-то не работает,то код показывают полностью такой какой есть, без изменений `тут мой Java скрипт',ибо ошибка может по невнимательности быть и в неправильной кавычке,забытой точке или лишнему пробелу, или еще какой хунте.

Скрипт c# и js висят на одном и том же го?
Если нет,то правильно ли сделана ссылка на нужный го?

Код выданный pax'om рабочий 146%

pax 15.05.2014 07:03

Ответ: Активация скрипта по требованию
 
Я могу догадаться, в чем дело... он написал имя скрипта без кавычек видимо...

CostUm 15.05.2014 19:08

Re: Активация скрипта по требованию
 
PHP код:

using UnityEngine;
using System.Collections;

public class 
Attack_hand MonoBehaviour {
public 
Transform Gun;
    public 
AnimationClip damage1
    public 
AnimationClip damage2
    private 
int rndAnim;
    public 
AudioClip metalhit1;
    
    
void Update ()
    {
        if (
Input.GetMouseButtonDown(0))
        {
            
Vector3 DirectionRay transform.TransformDirection(Vector3.forward);
                
RaycastHit Hit;
            
Debug.DrawRay(transform.positionDirectionRayColor.green);
            
rndAnim Random.Range(0,2);
            if (
rndAnim==0)
            {
                
Gun.animation.Play (damage1.name);
            }
                        if (
rndAnim==1)
            {
                
Gun.animation.Play (damage2.name);
            }
            
            if (
Physics.Raycast(transform.positionDirectionRayout Hit2.2f))
            {
                if(
Hit.rigidbody)
                {
                    
Hit.rigidbody.AddForceAtPosition(DirectionRay*4000f,Hit.point);
                }        
                if(
Hit.transform.collider.material.staticFriction == 0.25f)
                {
                    
Gun.audio.PlayOneShot(metalhit1);
                }
                if(
Hit.collider)
                {
                    var 
ston Hit.collider.gameObject.name;
                    (
ston.GetComponent("AI2") as MonoBehaviour).enabled false
                }
            }
        }
    }


Ну вот в общем то и код

pax 15.05.2014 20:19

Ответ: Активация скрипта по требованию
 
PHP код:

var ston Hit.collider.gameObject.name;
(
ston.GetComponent("AI2") as MonoBehaviour).enabled false

Забавно, поучаешь имя объекта и потом получаешь у имени компонент). Попробуй убрать ".name" из кода.

CostUm 15.05.2014 23:10

Re: Активация скрипта по требованию
 
не помогло

pax 16.05.2014 07:22

Ответ: Re: Активация скрипта по требованию
 
Цитата:

Сообщение от CostUm (Сообщение 280833)
не помогло

Ответы у тебя очень информативные. Хоть покажи есть ошибки какие в консоли... скриншоты структуры объекта в худшем случае (где какие скрипты висят). Быть экстрасенсом очень сложно знаешь ли.

seaman 16.05.2014 12:49

Ответ: Активация скрипта по требованию
 
Возможно нужно положить скрипт AI2 в папку Plugins (например) или StandartAssets.
https://docs.unity3d.com/Documentati...erFolders.html

CostUm 16.05.2014 12:53

Re: Ответ: Re: Активация скрипта по требованию
 
Цитата:

Сообщение от pax (Сообщение 280883)
Ответы у тебя очень информативные. Хоть покажи есть ошибки какие в консоли... скриншоты структуры объекта в худшем случае (где какие скрипты висят). Быть экстрасенсом очень сложно знаешь ли.

Ну а что тут информировать, консоль ничего не пишет, игра спокойно запускается но при выполнении условии скрипт остается в действии.

pax 16.05.2014 13:56

Ответ: Активация скрипта по требованию
 
Я конечно сомневаюсь, но возможно коллайдер где-то на чайлде объекта висит и можно попробовать так:
PHP код:

(ston.transform.root.GetComponent("AI2") as MonoBehaviour).enabled false

(но это опять гадание, непонятно где какие скрипты висят)
PS: странно... нет GetComponentInChildren принимающего имя компонента...

CostUm 16.05.2014 17:42

Re: Активация скрипта по требованию
 
Вложений: 1
Вообще так, там где цифра "1" - это тот самый объект, на котором висит скрипт, который мы тут пытаемся разобрать.
Там, где цифра "2" - это бот с ИИ, на котором висит другой скрипт Java, который требуется отключить с помощью 1-ого скрипта.
При всём этом нет никаких консольных ошибок и запуск игры даётся безприпятственно

pax 16.05.2014 18:11

Ответ: Активация скрипта по требованию
 
На pacan221 есть колайдер?

CostUm 16.05.2014 18:31

Re: Активация скрипта по требованию
 
хах, ну да, естественно) стал бы я проводить проверку на коллайдер)
не знаю играет ли это роли, но помимо коллайдера на нём ещё и CharacterController, его присутсвие обусловленно скриптом "AI2", коллайдер сделал дабы лучом попадать и из него вычислять сам объект, в котором обрубать скрипт

pax 16.05.2014 20:14

Ответ: Активация скрипта по требованию
 
CharacterController это тоже коллайдер. В общем хз что у тебя там такое, объект не находится в слое Ignore Raycast? Debug.DrawRay правильное направление показывает? Звук играет?

CostUm 16.05.2014 20:57

Re: Активация скрипта по требованию
 
Звук играет, но вот луч почему то не отрисовывается

pax 16.05.2014 20:59

Ответ: Активация скрипта по требованию
 
Попробуй рисовать луч каждый Update? хотя если звук работает, то должно быть все нормально...

CostUm 16.05.2014 23:38

Re: Активация скрипта по требованию
 
да не, с лучём всё в поряде оказалось, ну как и предполагалось, что дело не в нём

CostUm 16.05.2014 23:47

Re: Активация скрипта по требованию
 
лады, а как вместо отключение вызвать удаление компонента?

CostUm 17.05.2014 00:26

Re: Активация скрипта по требованию
 
решившись покапаться во 2 скрипте, начал думать что проблема таиться в нём, т.к. мне удалось углядеть, что галочка то в инспекторе всё таки снимается) но скрипт продолжает работать
PHP код:

var speed 3.0;
var 
rotationSpeed 5.0;
var 
shootRange 15.0;
var 
attackRange 30.0;
var 
shootAngle 4.0;
var 
dontComeCloserRange 5.0;
var 
delayShootTime 0.35;
var 
pickNextWaypointDistance 2.0;
var 
target Transform;

private var 
lastShot = -10.0;


// Make sure there is always a character controller
@script RequireComponent (CharacterController)

function 
Start () {
    
// Auto setup player as target through tags
    
if (target == null && GameObject.FindWithTag("Player"))
        
target GameObject.FindWithTag("Player").transform;

    
Patrol();
}


function 
Patrol () {
    var 
curWayPoint AutoWayPoint.FindClosest(transform.position);
    while (
true) {
        var 
waypointPosition curWayPoint.transform.position;
        
// Are we close to a waypoint? -> pick the next one!
        
if (Vector3.Distance(waypointPositiontransform.position) < pickNextWaypointDistance)
            
curWayPoint PickNextWaypoint (curWayPoint);

        
// Attack the player and wait until
        // - player is killed
        // - player is out of sight        
        
if (CanSeeTarget ())
            yield 
StartCoroutine("AttackPlayer");
        
        
// Move towards our target
        
MoveTowards(waypointPosition);
        
        yield;
    }
}


function 
CanSeeTarget () : boolean {
    if (
Vector3.Distance(transform.positiontarget.position) > attackRange)
        return 
false;
        
    var 
hit RaycastHit;
    if (
Physics.Linecast (transform.positiontarget.positionhit))
        return 
hit.transform == target;

    return 
false;
}

function 
Shoot () {
    
// Start shoot animation
    
animation.CrossFade("fire"0.3);

    
// Wait until half the animation has played
    
yield WaitForSeconds(delayShootTime);
    
    
// Fire gun
    
BroadcastMessage("Fire");
    
    
// Wait for the rest of the animation to finish
    
yield WaitForSeconds(animation["fire"].length delayShootTime);
}

function 
AttackPlayer () {
    var 
lastVisiblePlayerPosition target.position;
    while (
true) {
        if (
CanSeeTarget ()) {
            
// Target is dead - stop hunting
            
if (target == null)
                return;

            
// Target is too far away - give up    
            
var distance Vector3.Distance(transform.positiontarget.position);
            if (
distance shootRange 3)
                return;
            
            
lastVisiblePlayerPosition target.position;
            if (
distance dontComeCloserRange)
                
MoveTowards (lastVisiblePlayerPosition);
            else
                
RotateTowards(lastVisiblePlayerPosition);

            var 
forward transform.TransformDirection(Vector3.forward);
            var 
targetDirection lastVisiblePlayerPosition transform.position;
            
targetDirection.0;

            var 
angle Vector3.Angle(targetDirectionforward);

            
// Start shooting if close and play is in sight
            
if (distance shootRange && angle shootAngle)
                yield 
StartCoroutine("Shoot");
        } else {
            yield 
StartCoroutine("SearchPlayer"lastVisiblePlayerPosition);
            
// Player not visible anymore - stop attacking
            
if (!CanSeeTarget ())
                return;
        }

        yield;
    }
}

function 
SearchPlayer (position Vector3) {
    
// Run towards the player but after 3 seconds timeout and go back to Patroling
    
var timeout 3.0;
    while (
timeout 0.0) {
        
MoveTowards(position);

        
// We found the player
        
if (CanSeeTarget ())
            return;

        
timeout -= Time.deltaTime;
        yield;
    }
}

function 
RotateTowards (position Vector3) {
    
SendMessage("SetSpeed"0.0);
    
    var 
direction position transform.position;
    
direction.0;
    if (
direction.magnitude 0.1)
        return;
    
    
// Rotate towards the target
    
transform.rotation Quaternion.Slerp (transform.rotationQuaternion.LookRotation(direction), rotationSpeed Time.deltaTime);
    
transform.eulerAngles Vector3(0transform.eulerAngles.y0);
}

function 
MoveTowards (position Vector3) {
    var 
direction position transform.position;
    
direction.0;
    if (
direction.magnitude 0.5) {
        
SendMessage("SetSpeed"0.0);
        return;
    }
    
    
// Rotate towards the target
    
transform.rotation Quaternion.Slerp (transform.rotationQuaternion.LookRotation(direction), rotationSpeed Time.deltaTime);
    
transform.eulerAngles Vector3(0transform.eulerAngles.y0);

    
// Modify speed so we slow down when we are not facing the target
    
var forward transform.TransformDirection(Vector3.forward);
    var 
speedModifier Vector3.Dot(forwarddirection.normalized);
    
speedModifier Mathf.Clamp01(speedModifier);

    
// Move the character
    
direction forward speed speedModifier;
    
GetComponent (CharacterController).SimpleMove(direction);
    
    
SendMessage("SetSpeed"speed speedModifierSendMessageOptions.DontRequireReceiver);
}

function 
PickNextWaypoint (currentWaypoint AutoWayPoint) {
    
// We want to find the waypoint where the character has to turn the least

    // The direction in which we are walking
    
var forward transform.TransformDirection(Vector3.forward);

    
// The closer two vectors, the larger the dot product will be.
    
var best currentWaypoint;
    var 
bestDot = -10.0;
    for (var 
cur AutoWayPoint in currentWaypoint.connected) {
        var 
direction Vector3.Normalize(cur.transform.position transform.position);
        var 
dot Vector3.Dot(directionforward);
        if (
dot bestDot && cur != currentWaypoint) {
            
bestDot dot;
            
best cur;
        }
    }
    
    return 
best;



pax 17.05.2014 10:36

Ответ: Активация скрипта по требованию
 
Тут все на корутинах, должно отключаться... а других скриптов на нем нет?

CostUm 17.05.2014 16:03

Re: Активация скрипта по требованию
 
Есть, AIAnimation, по идеи эти 2 скрипта вместе работают, т.к. 1 гоняет его по вейпоинтам, другой анимирует
var minimumRunSpeed = 1.0;

PHP код:

function Start () {
    
// Set all animations to loop
    
animation.wrapMode WrapMode.Loop;

    
// Except our action animations, Dont loop those
    
animation["Take 001"].wrapMode WrapMode.Once;
    
    
// Put idle and run in a lower layer. They will only animate if our action animations are not playing
    
animation["Take 001"].layer = -1;
    
animation["Take 001"].layer = -1;
    
animation["Take 001"].layer = -1;
    
    
animation.Stop();
}

function 
SetSpeed (speed float) {
    if (
speed minimumRunSpeed)
        
animation.CrossFade("Take 001");
    else
        
animation.CrossFade("Take 001");



pax 17.05.2014 16:08

Ответ: Активация скрипта по требованию
 
попробуй еще дописать
ston.animation.Stop();

CostUm 17.05.2014 17:09

Re: Активация скрипта по требованию
 
Assets/��������/�������/AIAnimation.js(15,9): BCE0005: Unknown identifier: 'ston'.

CostUm 17.05.2014 17:11

Re: Активация скрипта по требованию
 
я бы уже если честно воспользовался бы каким нибудь другим способом реализации ИИ прохожих, если бы нашёл) я хотел сделать принцип, что люди ходят по путям, и если я начинаю битву с ними, то скрипт вейпоинтов отключается, и включается скрипт поведения драки какой нибудь, но вот что то не заладилось

pax 17.05.2014 17:30

Ответ: Активация скрипта по требованию
 
Это надо было дописать туда же, где отключается AI2

CostUm 17.05.2014 18:32

Re: Активация скрипта по требованию
 
Assets/��������/�������/AI2.js(183,9): BCE0005: Unknown identifier: 'ston'.

pax 17.05.2014 18:56

Ответ: Активация скрипта по требованию
 
Я надеюсь ты сделал так... иначе просто мне начинает надоедать уже это все... начни уже понимать что в коде написано.
PHP код:

...
                if(
Hit.collider
                { 
                    var 
ston Hit.collider.gameObject
                    (
ston.GetComponent("AI2") as MonoBehaviour).enabled false;
                    
ston.animation.Stop();
                } 
... 


CostUm 17.05.2014 20:04

Re: Активация скрипта по требованию
 
хах, а ты думаешь мне по приколу?) да, именно так и сделал, предварительно удалив подобную строку в AIAnimation

pax 17.05.2014 20:09

Ответ: Активация скрипта по требованию
 
Если именно так, то данной ошибки быть не могло

CostUm 17.05.2014 20:35

Re: Активация скрипта по требованию
 
Вложений: 1
ну глянь

pax 17.05.2014 20:39

Ответ: Активация скрипта по требованию
 
У тебя ошибка в AI2, а не в твоем скрипте

CostUm 18.05.2014 00:12

Re: Активация скрипта по требованию
 
хах ну да, почему то таже строка оказалось в 2-ух скриптах)
но как уже по традиции тем не менее ничего не работает(


Часовой пояс GMT +4, время: 10:10.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot