Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Unity > Общие вопросы

Общие вопросы вопросы не попадающие ни в один из доступных разделов

Ответ
 
Опции темы
Старый 26.02.2013, 18:22   #1
Федор
AnyKey`щик
 
Регистрация: 26.02.2013
Сообщений: 3
Написано 0 полезных сообщений
(для 0 пользователей)
Очень нужна ваша помощь

Здравствуйте. Решил сделать маленькую игру и столкнулся с проблемой. Есть предмет который должен автоматически двигаться вниз, а когда нажата кнопка вверх (UpArrow) предмет должен подниматься.

public class Pl : MonoBehaviour {
	

	 public float speed;
         private bool up;

	
	void Start () {
	
		up = false;
                speed = 1;

	}
	

	void Update () 
	{
	if (Time.timeScale != 0)
		{
			if(Input.GetKeyDown(KeyCode.UpArrow))
			{
				SetUp(false);
			}
			else if(Input.GetKeyUp(KeyCode.UpArrow))
			{
				SetUp(false);
			}

			if(!up)
			{
				Down();
			}
			else
			{
				Up();
			}
		}
	}
	void Up()
	{
		Vector3 temp = transform.position;
		temp.y = 4;
		transform.position = temp;
	}
	void Down()
	{
		Vector3 temp = transform.position;
		temp.y = -4;
		transform.position = temp;
		
	}
	void SetUp(bool up)
	{
		this.up = up;
	}
}
Он сразу летит в указанную координату "4", а должен плавно перемещаться. Помогите разобраться.
(Offline)
 
Ответить с цитированием
Старый 26.02.2013, 18:39   #2
EvilOkta
Знающий
 
Аватар для EvilOkta
 
Регистрация: 31.07.2008
Сообщений: 321
Написано 108 полезных сообщений
(для 229 пользователей)
Ответ: Очень нужна ваша помощь

Первое что бросается в глаза ошибка в условии:

if (Time.timeScale != 0)
        {
            if(
Input.GetKeyDown(KeyCode.UpArrow))
            {
                
SetUp(false);
            }
            else if(
Input.GetKeyUp(KeyCode.UpArrow))
            {
                
SetUp(false);
            } 
условие дублируется дважды, я так думаю во втором случае имелось ввиду KeyCode.DownArrow? тогда нужно в метод передать true и в методе менять ее на false

void Up()
    {
        
Vector3 temp transform.position;
        
temp.4;
        
transform.position temp
Такая конструкция сразу перенесет объект в позицию с координатой Y = 4.
Для плавного перемещения используйте Translate:

transform.Translate(Vector3.up Time.deltaTimeSpace.World); // как пример из справки 
Вот подробнее
http://docs.unity3d.com/Documentatio...Translate.html

И затем проверяйте условием достиг ли объект y=4. Если достиг то обнуляйте переменную up.

З.Ы. Писал без юнити под боком, но надеюсь идея понятна
__________________
Области Хаоса - мой новый Youtube проект
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Федор (26.02.2013)
Старый 26.02.2013, 18:47   #3
EvilOkta
Знающий
 
Аватар для EvilOkta
 
Регистрация: 31.07.2008
Сообщений: 321
Написано 108 полезных сообщений
(для 229 пользователей)
Ответ: Очень нужна ваша помощь

еще обратил внимание - в обоих условиях нужно использовать GetKeyDown - это событие в момент нажатия кнопки, GetKeyUp наступает
когда клавиша наоборот отжимается.

upd:
невнимательно прочел условие задачи. действительно в вашем случае нужно использовать GetKeyUp и GetKeyDown, но тогда при событии GetKeyDown нужно обнулять значение up

и неправильно понял про GetKeyUp(KeyCode.UpArrow) - здесь у вас все правильно. =) Конец рабочего дня, совсем не вижу мелочей))
__________________
Области Хаоса - мой новый Youtube проект
(Offline)
 
Ответить с цитированием
Старый 26.02.2013, 18:49   #4
Федор
AnyKey`щик
 
Регистрация: 26.02.2013
Сообщений: 3
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Очень нужна ваша помощь

Спасибо большое за помощь. Сейчас буду исправлять свои грехи.
(Offline)
 
Ответить с цитированием
Старый 26.02.2013, 19:00   #5
EvilOkta
Знающий
 
Аватар для EvilOkta
 
Регистрация: 31.07.2008
Сообщений: 321
Написано 108 полезных сообщений
(для 229 пользователей)
Ответ: Очень нужна ваша помощь

вот тут непонятно еще:
this.up = up;

имелось ввиду наверное
this.up = true;
или
this.up = false;
__________________
Области Хаоса - мой новый Youtube проект
(Offline)
 
Ответить с цитированием
Старый 26.02.2013, 19:10   #6
Федор
AnyKey`щик
 
Регистрация: 26.02.2013
Сообщений: 3
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Очень нужна ваша помощь

Честно говоря я не знаю, я только начал изучать юнити и писал код как знал. Просто нигде не нашел примера

P.S. Исправил как Вы посоветовали, но без изменений...

P.S.s. Не могли бы Вы помочь мне с написанием кода?
(Offline)
 
Ответить с цитированием
Старый 26.02.2013, 19:47   #7
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Очень нужна ваша помощь

Имхо много лишнего по указанной постановке задачи...

public class Pl MonoBehaviour {

     public 
float speed;

    
void Start () 
        {
             
speed 1;
        }
    

    
void Update () 
    {
             
Vector3 temp transform.position;
             if(
Input.GetKey(KeyCode.UpArrow))
             {
                  
temp.+= Time.deltaTime speed;
             }
             else
             {
                  
temp.-= Time.deltaTime speed;
             }
             
temp.Mathf.Clamp(temp.y, -4f4f);
             
transform.position temp;
    }

__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
EvilOkta (26.02.2013)
Старый 19.06.2014, 05:17   #8
LLI.T.A.L.K.E.R.
Мастер
 
Аватар для LLI.T.A.L.K.E.R.
 
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений
(для 504 пользователей)
Ответ: Очень нужна ваша помощь

как перехватить handle у респавненого объекта (игрока)?

как прикрепить камеру к программно созданному объекту?

если держать скрипт в префабе объекта - хер камеру свяжешь
если делать скрипт в камере - не знаю как прикрепить респавн

ну и мудёж..


что куда тыкать-втыкать?

перечитал 10 ресурсов и везде тычат на скрипт висящий на камере, к которому крепится подготовленный player..

будто никогда никто не крепил камеру к prefab-у.. или это секретный код?
(Offline)
 
Ответить с цитированием
Старый 19.06.2014, 05:24   #9
LLI.T.A.L.K.E.R.
Мастер
 
Аватар для LLI.T.A.L.K.E.R.
 
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений
(для 504 пользователей)
Ответ: Очень нужна ваша помощь

в общем проще ответить как прикреплять к скрипту респавнутый объект

вот коды чего сейчас изучаю:
using UnityEngine;
using System.Collections;

public class 
NetworkManager MonoBehaviour {

public 
GameObject playerPrefab;

private const 
string typeName "UniqueGameName";
private const 
string gameName "RoomName";

private 
void StartServer()
{
    
Network.InitializeServer(425000, !Network.HavePublicAddress());
    
MasterServer.RegisterHost(typeNamegameName);
}

private 
HostData[] hostList;

private 
void RefreshHostList()
{
    
MasterServer.RequestHostList(typeName);
}

void OnMasterServerEvent(MasterServerEvent msEvent)
{
    if (
msEvent == MasterServerEvent.HostListReceived)
        
hostList MasterServer.PollHostList();
}

private 
void JoinServer(HostData hostData)
{
    
Network.Connect(hostData);
}

void OnGUI()
{
    if (!
Network.isClient && !Network.isServer)
    {
        if (
GUI.Button(new Rect(100100250100), "Start Server"))
            
StartServer();

        if (
GUI.Button(new Rect(100250250100), "Refresh Hosts"))
            
RefreshHostList();

        if (
hostList != null)
        {
            for (
int i 0hostList.Lengthi++)
            {
                if (
GUI.Button(new Rect(400100 + (110 i), 300100), hostList[i].gameName))
                    
JoinServer(hostList[i]);
            }
        }
    }
}

void OnServerInitialized()
{
    
SpawnPlayer();
}

void OnConnectedToServer()
{
    
SpawnPlayer();
}

private 
void SpawnPlayer()
{
    
Network.Instantiate(playerPrefab, new Vector3(0f5f0f), Quaternion.identity0);
}


using UnityEngine;
using System.Collections;

public class 
Player MonoBehaviour
{

public 
float speed 10f;

void Start() {
    if (!
networkView.isMinenetworkView.observed=this;
}

void InputMovement()
{
    if (
Input.GetKey(KeyCode.W))
        
rigidbody.MovePosition(rigidbody.position Vector3.forward speed Time.deltaTime);
    
    if (
Input.GetKey(KeyCode.S))
        
rigidbody.MovePosition(rigidbody.position Vector3.forward speed Time.deltaTime);
    
    if (
Input.GetKey(KeyCode.D))
        
rigidbody.MovePosition(rigidbody.position Vector3.right speed Time.deltaTime);
    
    if (
Input.GetKey(KeyCode.A))
        
rigidbody.MovePosition(rigidbody.position Vector3.right speed Time.deltaTime);
}

private 
float lastSynchronizationTime 0f;
private 
float syncDelay 0f;
private 
float syncTime 0f;
private 
Vector3 syncStartPosition Vector3.zero;
private 
Vector3 syncEndPosition Vector3.zero;

void OnSerializeNetworkView(BitStream streamNetworkMessageInfo info)
{
    
Vector3 syncPosition Vector3.zero;
    
Vector3 syncVelocity Vector3.zero;
    if (
stream.isWriting)
    {
        
syncPosition rigidbody.position;
        
stream.Serialize(ref syncPosition);
        
        
syncVelocity rigidbody.velocity;
        
stream.Serialize(ref syncVelocity);
    }
    else
    {
        
stream.Serialize(ref syncPosition);
        
stream.Serialize(ref syncVelocity);
        
        
syncTime 0f;
        
syncDelay Time.time lastSynchronizationTime;
        
lastSynchronizationTime Time.time;
        
        
syncEndPosition syncPosition syncVelocity syncDelay;
        
syncStartPosition rigidbody.position;
    }
}

void Update()
{
    if (
networkView.isMine)
    {
        
InputMovement();
    }
    else
    {
        
SyncedMovement();
    }
}

private 
void SyncedMovement()
{
    
syncTime += Time.deltaTime;
    
rigidbody.position Vector3.Lerp(syncStartPositionsyncEndPositionsyncTime syncDelay);
}




или надо б\у камеру удалять, а у спавн-объекта пересоздавать и закреплять?
(Offline)
 
Ответить с цитированием
Старый 19.06.2014, 06:27   #10
LLI.T.A.L.K.E.R.
Мастер
 
Аватар для LLI.T.A.L.K.E.R.
 
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений
(для 504 пользователей)
Ответ: Очень нужна ваша помощь

пока из двух скриптов собрал этакое:

GameObject clone;
clone=Network.Instantiate(playerPrefab, new Vector3(0f, 5f, 0f), Quaternion.identity, 0) as GameObject;
transform.parent = clone.transform;
(Offline)
 
Ответить с цитированием
Старый 19.06.2014, 10:49   #11
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Очень нужна ваша помощь

Собственно из кода ты можешь обращаться к камере так:
Camera.main.transform.parent = clone.transform
Статическое свойства Camera.main ищет первую попавшуюся камеру в сцене с тегом MainCamera. Поэтому где висит скрипт сети не важно.

Другой вариант, когда ты в скрипте создаешь ссылку на объект сцены.
public calss MyScriptMonoBehaviour{
    public 
Transform cameraTransform;

   

У такого скрипта появится свойство в инспекторе с названием Camera Transform на которое можно перетащить камеру из сцены. Потом в скрипте можно использовать поле cameraTransform как готовую ссылку на трансформ камеры.

cameraTransform.parent = clone.transform
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
LLI.T.A.L.K.E.R. (19.06.2014)
Старый 21.06.2014, 03:55   #12
LLI.T.A.L.K.E.R.
Мастер
 
Аватар для LLI.T.A.L.K.E.R.
 
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений
(для 504 пользователей)
Ответ: Очень нужна ваша помощь

для быстрого ответа читать итоговые вопросы ниже

~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
Как добавить скрипт (что-то) в prefab?

Хотел добавить доп. скрипт - а мне пишет:
cleaning up leaked objects

Что, заново новый prefab пересобирать?

(даже уже ранее применимый в этом же prefabe скрипт перекрепляю - нет, уже не принимает)
сложно с логикой в unity...


не воспринимает даже старых знакомых

первый скрипт родной для prefab

второй использовал для наглядности этот же (с другим скриптом так же), просто у этого точно ошибок нет (а раз другой не воспринимает, то и заниматься им некогда)
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

1 как редактировать prefab? как в готовый pref далее добавить такие плюшки как аудио, скрипт и прочие компоненты?

2 вопрос:
хочу переместить расположение скрипта (отсортировать по папкам)
- что делать дальше? почему unity теряет связь? хоть и пробовал пересвязать скрипты в объекте.
Ну например перекину в Scripts/ , а не хочу иметь Standard Assets/Character Controllers/Sources/Scripts/FPSInputController.js

ну вот............... хотел скрипт "стрельбу" к игроку прикрутить........ а тут на те - сперва prefab добейся...........
(Offline)
 
Ответить с цитированием
Старый 21.06.2014, 04:28   #13
LLI.T.A.L.K.E.R.
Мастер
 
Аватар для LLI.T.A.L.K.E.R.
 
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений
(для 504 пользователей)
Ответ: Очень нужна ваша помощь

вопрос выше актуален

а пока сделал так
в Project сделал Create > Prefab

перетаскиванием мыши заменил старым в новый, переименовал в старое Player имя
и тут уже Unity разрешает делать (вроде) что хочешь

(а может всё из-за того что Player prefab был закреплён в скрипте у Camera)

а когда проект будет огромен и замудрен - как им управляются разработчики?
каждый раз детали заново откреплять-закреплять, пересоздавать?
(Offline)
 
Ответить с цитированием
Старый 21.06.2014, 09:37   #14
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Очень нужна ваша помощь

cleaning up leaked objects
А какие-то пакаджи в проект ты импортировал? Я уверен что при работе с префабами не будет такой ошибки. Обычно некоторые плагины забывают в своих Editor-скриптах чистить ресурсы.

1. Перетаскиваешь префаб в сцену, изменяешь и жмеш кнопку Apply. Удаляешь из сцены. Если он уже в сцене есть и помечен синим, то просто изменяешь и жмешь Apply.

2. Перемещай скрипты и другие ассеты в окне Project, а не в проводнике или другой программе. Если перемещаешь в проводнике, то не забывай перемещать файлы *.meta вместе с файлами скриптов и папками. Если их нет, то надо в проекте их включить. Включается это в меню Edit > Project Settings > Editor > Version Control = Asset Server или Visible Meta Files
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
LLI.T.A.L.K.E.R. (21.06.2014)
Старый 21.06.2014, 19:25   #15
LLI.T.A.L.K.E.R.
Мастер
 
Аватар для LLI.T.A.L.K.E.R.
 
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений
(для 504 пользователей)
Ответ: Очень нужна ваша помощь

Сообщение от pax Посмотреть сообщение
2. Перемещай скрипты и другие ассеты в окне Project, а не в проводнике или другой программе.
в том то и дело что я поступал unity-логично и перемещал в панели project, но всё равно какая-то ошибка была.. ну пока это не так важно.

начал осваивать [RPC]
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com