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

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

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

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

Ответ
 
Опции темы
Старый 31.05.2011, 21:11   #1
mcvarik
AnyKey`щик
 
Аватар для mcvarik
 
Регистрация: 30.05.2011
Сообщений: 4
Написано 0 полезных сообщений
(для 0 пользователей)
Как назначить движение обьекта

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

http://forum.boolean.name/showthread.php?t=12657
в туторе есть скрипт, который вращает кубик, перемещать можно через transform.position = new Vector3(...), или transform.Move()
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 05.09.2011, 01:55   #3
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
Ответ: Как назначить движение обьекта

блин, в туторе. там вращение. а еще миллион пока вопросов остается, пока я в синтаксисе туплю. столько раз бросал эту затею, да возвращаюсь.

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

using UnityEngine;
using System.Collections;

public class Enemy : MonoBehaviour
{
// скорость ходьбы и скорость поворота в секунду
public float moveSpeed = 2;
public float turnSpeed = 90;
public string Players;
private CharacterController _controller;
private Transform _thisTransform;
private Transform _playerTransform;

public void Start()
{
// Получаем контроллер
_controller = GetComponent<CharacterController>();

// Получаем компонент трансформации объекта, к которому привязан данный компонент
_thisTransform = transform;

// Получаем компонент трансформации игрока
Player player = (Player)FindObjectOfType(typeof(Player));
_playerTransform = player.transform;
}

// Все что связано с физикой выполняем в FixedUpdate
public void FixedUpdate()
{
// направление на игрока
Vector3 playerDirection = (_playerTransform.position - _thisTransform.position).normalized;

// угол поворота на игрока
float angle = Vector3.Angle(_thisTransform.forward, playerDirection);

// максимальный угол поворота на текущем кадре
float maxAngle = turnSpeed * Time.deltaTime;

// Вычисляем прямой поворот на игрока
Quaternion rot = Quaternion.LookRotation(_playerTransform.position - _thisTransform.position);

// поворачиваем врага на игрока с учетом скорости поворота
if (maxAngle < angle)
{
_thisTransform.rotation = Quaternion.Slerp(_thisTransform.rotation, rot, maxAngle / angle);
}
else
{
_thisTransform.rotation = rot;
}

// если дистанция до игрока больше трех метров
if (Vector3.Distance(_playerTransform.position, _thisTransform.position) > 3.0f)
{
// двигаемся к игроку
_controller.Move(_thisTransform.forward * moveSpeed * Time.deltaTime);
}
else // если меньше или равна трем метрам
{
// здесь например стреляем в игрока
}

// гравитация
_controller.Move(Vector3.down * 10.0f * Time.deltaTime);
}
}
КАК он определяте, что именно за этим кубиком идти? где это написано?

Player player = (Player)FindObjectOfType(typeof(Player));
_playerTransform = player.transform;

ни о чем не говорит. почему два раза playerh повторяется? может кто-нибудь детальнее объяснить этот синтаксис, не доходит до меня (
(Offline)
 
Ответить с цитированием
Старый 05.09.2011, 14:19   #4
Lestar
Бывалый
 
Аватар для Lestar
 
Регистрация: 24.05.2011
Адрес: Украина,Харьков
Сообщений: 890
Написано 359 полезных сообщений
(для 880 пользователей)
Ответ: Как назначить движение обьекта

_thisTransform.rotation Quaternion.Slerp(_thisTransform.rotationrotmaxAngle angle); 
Здесь поворачиваем на игрока.
_controller.Move(_thisTransform.forward moveSpeed Time.deltaTime); 
Здесь просто двигаемся вперед,что соответствует позиции игрока.

Player player = (Player)FindObjectOfType(typeof(Player));
_playerTransform player.transform
1-е ищем обьект Player
2-е получаем его трансформ

P.S. Player player потому что есть где то класс Player и мы создаем экземпляр класса ,который кому то захотелось назвать player.
__________________
Нам суждено построить мосты и храмы,которых никогда не существовало и не могло существовать в природе.

Последний раз редактировалось Lestar, 05.09.2011 в 15:20.
(Offline)
 
Ответить с цитированием
Старый 06.09.2011, 10:30   #5
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
Ответ: Как назначить движение обьекта

я понимаю, что здесь и здесь , строчки могу понятьт предназначение, но детально что в ней написано - в упор (
(Offline)
 
Ответить с цитированием
Старый 06.09.2011, 14:18   #6
Lestar
Бывалый
 
Аватар для Lestar
 
Регистрация: 24.05.2011
Адрес: Украина,Харьков
Сообщений: 890
Написано 359 полезных сообщений
(для 880 пользователей)
Ответ: Как назначить движение обьекта

_thisTransform.rotation Quaternion.Slerp(_thisTransform.rotationrotmaxAngle angle); 
В каждом фрейме поворачиваем обьект от ротейшен обьекта(_thisTransform.rotation) до ротейшен игрока(rot) Линк
Величину поворота(говорю величину поворота,чтобы было более понятно.В действительности мы интерполируем от значения _thisTransform.rotation до rot) определяем как maxAngle / angle ,где maxAngle максимальный угол поворота во фрейме ,angle - угол между локалью enemy и player в текущем фрейме.

В то время как в каждом фоейме мы поворачиваем enemy ,мы обьект так же двигаем вдоль локальной оси.
_controller.Move(_thisTransform.forward moveSpeed Time.deltaTime); 
Линк
Как еще более подробно написать я хз.
__________________
Нам суждено построить мосты и храмы,которых никогда не существовало и не могло существовать в природе.
(Offline)
 
Ответить с цитированием
Старый 21.09.2011, 12:04   #7
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Как назначить движение обьекта

Player player = (Player)FindObjectOfType(typeof(Player)); 
Player player = [выражение]
- объявляем переменную player типа Player (есть такой скрипт, он определяет тип)

Player player = (Player)FindObjectOfType(typeof(Player));
- присваиваем этой переменной найденный в сцене объект типа Player (typeof(Player)).
Т.к. функция FindObjectOfType возвращает тип UnityEngine.Object, базовый для всех объектов Unity, то его необходимо привести к типу Player, чтобы присвоить переменной такого типа. Об этом говорит запись прямого приведения типов Player player = (Player)[объект,тип которого приводится].

Это особенности строго типизированного объектно-ориентированного языка.

Про приведение типов:
запись Player player = (Player)[выражение] не проверяет тип объекта, переданный в [выражение]. Если [выражение] имеет тип отличный от Player и не является наследником типа Player, то на данной строке произойдет ошибка. Безопасное приведение типов можно выполнить следующим образом: Player player = [выражение] as Player. В таком случае, если в [выражение] находится тип, не приводимый к типу Player в переменную player установится значение null.

Пример:

Player player FindObjectOfType(typeof(Player)) as Player;
if(
player != null)
{
   
//действие с переменной player;

__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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