forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   Вотпросы от mepihin! (http://forum.boolean.name/showthread.php?t=17716)

mepihin 06.01.2013 03:02

Ответ: Вотпросы от mepihin!
 
то есть наеисать отжельный скрипт в кгтгром есть функция он триггер ентер с проверкой на игрока? Но тогда как сделать проверку на игрока? Сетка как никак

pax 06.01.2013 10:53

Ответ: Вотпросы от mepihin!
 
А что, игрок не у каждого клиента есть?. У каждого клиента модель подойдет к триггеру, он и откроется.

mepihin 06.01.2013 14:30

Ответ: Вотпросы от mepihin!
 
Я не понял. Вот у меня есть скрипт FPSInputController, который переделал. Там есть функция OnTriggerStay, в которой реализоана смерть игрока, а также тригер двери, что мне делать, чтобы не лагала система?
PHP код:

function CloseDoor()
{
    
networkView.RPC("SetDoorAnimation",RPCMode.All"close");
    yield 
WaitForSeconds(2);
    
dooractive false;
}

function 
OpenDoor()
{
    
networkView.RPC("SetDoorAnimation",RPCMode.All"open");
    yield 
WaitForSeconds(2);
    
dooractive true;
}

function 
OnTriggerStay(other:Collider)
{
    if(
networkView.isMine)
    {
        if(
other.tag == "fire")
        {
            
infire true;
        }
        if(
other.tag == "door" && dooractive == false && Input.GetKeyDown(KeyCode.E))
        {
            
OpenDoor();
        }
        if(
other.tag == "door" && dooractive == true && Input.GetKeyDown(KeyCode.E))
        {
            
CloseDoor();
        }                
    }
}

@
RPC
function SetDoorAnimation(DooranimationName:System.String)
{
    
GameObject.FindGameObjectWithTag("door").animation.CrossFade(DooranimationName);


То есть хочу этот скрипт сделать универсальным для каждой двери + чтобы не лагало

mepihin 06.01.2013 18:23

Ответ: Вотпросы от mepihin!
 
Вопрос:
Вот у меня есть префаб игрока, у которо есть удочеренный объект. На основном префабе висит Audio Source/listner, а на удочеренном Audio Source, также NetworkView.
На основной префебаме мой скрипт, который гасит звук чужого игрока(то есть если не я то нафиг звуки), НО я слышу только чужой звук хотьбы, а не свой. В чем касяк?
PHP код:

#pragma strict

function Awake()
{
    if(!
networkView.isMine)
    {
        
transform.GetComponent(AudioSource).enabled false;
        
transform.FindChild("FULL_MAX005").GetComponent(AudioSource).enabled false;
    }


У главного префаба параметр NetworkView - Realabe... и у удочеренного тоже самое. Если говорить точнее, то при подключение игрока к серверу все не слышат свои звуки, а слышат только чужую хотьбу, находясь рядом с ними

pax 06.01.2013 18:24

Ответ: Вотпросы от mepihin!
 
Правильно - скрипт для двери вешать на дверь или триггер двери. А не собирать все в скрипте игрока.

mepihin 06.01.2013 21:41

Ответ: Вотпросы от mepihin!
 
И чтоже это получается?
Типо вот скрипт на открытие двери:
PHP код:

function OnTriggerStay(other:Collider)
{
    if(
networkView.isMine)
    {
        if(
other.tag == "Player" && dooractive == false && Input.GetKeyDown(KeyCode.E))
        {
            
OpenDoor();
        }
        if(
other.tag == "Player" && dooractive == true && Input.GetKeyDown(KeyCode.E))
        {
            
CloseDoor();
        }                
    }


Так для сетки?

Ну вот я так сделал, но лаги все равно остались

pax 06.01.2013 23:13

Ответ: Вотпросы от mepihin!
 
в задании не было сказано, что дверь надо открывать на кнопку, был обозначен триггер и все. Из этого последовал ответ, что триггер должен сам дверь открыть.
В твоем случае надо посылать OpenDoor(); и CloseDoor(); как RPC

mepihin 07.01.2013 14:38

Ответ: Вотпросы от mepihin!
 
Вот блин вопрос:
Почему я не могу получить переменную из моего скрипта в Character Motor. То есть мне нужно использовать переменную из моего скрипта FPSController в моторе.
Делаю так:
PHP код:

private var fpscontroller GameObject;

function 
Awake () {
    
controller GetComponent (CharacterController);
    
tr transform;
    
fpscontroller GetComponent("FPSController");
}

function 
Update () {
    if (!
useFixedUpdate)
        
UpdateFunction();
    if(
Input.GetKey(KeyCode.LeftShift) && fpscontroller.speedactive == true)
    {
        
movement.maxForwardSpeed 6.0;
    }
    if(!
Input.GetKey(KeyCode.LeftShift) && fpscontroller.speedactive == false)
    {
        
movement.maxForwardSpeed 3.0;
    }
    else
    {
        if(!
Input.GetKey(KeyCode.LeftShift) && fpscontroller.speedactive == true)
        {
            
movement.maxForwardSpeed 3.0;
        }
    }
    if(
Input.GetKey(KeyCode.LeftShift) && fpscontroller.speedactive == false)
    {
        
movement.maxForwardSpeed 3.0;
    }


Пишет вот что:
Цитата:

Assets/Standard Assets/Character Controllers/Sources/Scripts/CharacterMotor.js(340,61): BCE0019: 'speedactive' is not a member of 'UnityEngine.GameObject'.
Во всех строках где это есть. Перменная такая существует!
Делал иначе:
PHP код:

if(Input.GetKey(KeyCode.LeftShift) && gameObject.transform.GetComponent("FPSController").speedactive == false)
    {
        
movement.maxForwardSpeed 3.0;
    } 

Пишет вот так:
Цитата:

Assets/Standard Assets/Character Controllers/Sources/Scripts/CharacterMotor.js(337,98): BCE0019: 'speedactive' is not a member of 'UnityEngine.Component'.
Еще вот так пытался:
PHP код:

transform.transform.GetComponent("FPSController").speedactive 

Аналогичная ошибка, что мне делать?

mepihin 08.01.2013 19:05

Ответ: Вотпросы от mepihin!
 
Вот возник вопрос:
Я хочу сделать пр нажатии на E спавн луча и проверку на соприкосновение с объектом, имеющий триггер "letter", и дистанцую в 5 меторов. Как мне сделать это? Подкиньте код.
PHP код:

if(Input.GetKeyDown(KeyCode.E))
         {
                 if (
Physics.Raycast (transform.position, -Vector3.uphit100.0)) 
                 {        
                     var 
distanceToGround hit.distance;    
                 }
         } 

Так не выходит

mepihin 08.01.2013 20:21

Ответ: Вотпросы от mepihin!
 
Вот я сделал так:
Но вот что-то не хочет работать:
PHP код:

function Atake()
{
    var 
DirectionRay Vector3 transform.FindChild("BACKPACK1").TransformDirection(Vector3.forward); 
    var 
Hit RaycastHit;
    if(
Physics.Raycast(transform.positionDirectionRay,Hit,Range))
    {
        if(
Hit.collider.tag == "letter" )
        {
            
Destroy(Hit.collider.gameObject);
          } 
      } 




pax 08.01.2013 20:36

Ответ: Вотпросы от mepihin!
 
PHP код:

function Atake()
{
        var 
childTransform =  transform.FindChild("BACKPACK1");
 
        var 
Hit RaycastHit;
        if(
Physics.Raycast(child.positionchild.forward,Hit,Range))
        {
                if(
Hit.collider.tag == "letter" )
                {
                
Destroy(Hit.collider.gameObject);
                }
        }
 



mepihin 08.01.2013 20:44

Ответ: Вотпросы от mepihin!
 
Никак

seaman 08.01.2013 20:59

Ответ: Вотпросы от mepihin!
 
Нарисуйте линию. Может child.forward смотрит куда-то в бок.
Код:

Debug.DrawLine(child.position, child.position + 100 * child.forward, Color.white, 100.0f);

mepihin 08.01.2013 21:05

Ответ: Вотпросы от mepihin!
 
Нет, все работает теперь хорошо, но вот не могу увеличить длину луча:
PHP код:

var Range float 1000.0;

function 
Update()
{
    if(
Input.GetKey(KeyCode.E))
    {
        
Debug.DrawRay (transform.positiontransform.forwardColor.green);    
        
Atack();
    }
}

function 
Atack()
{
    var 
forward Vector3 =  transform.TransformDirection(Vector3.forward) * 10;
    var 
Hit RaycastHit;
    if(
Physics.Raycast(transform.positiontransform.forward,Hit,Range))
    {
        if(
Hit.collider.tag == "letter" )
        {
            
Destroy(Hit.collider.gameObject);
          } 
      } 



Он все равно одной длины

seaman 08.01.2013 21:37

Ответ: Вотпросы от mepihin!
 
О длине какого луча Вы говорите? Если DrawRay,- так задавайте в нем длину. Если Raycas, - как вы определяете, что она не меняется.
ЗЫ: заем Вам вообще forward : Vector3?


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

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