|
Общие вопросы вопросы не попадающие ни в один из доступных разделов |
31.05.2011, 21:11
|
#1
|
AnyKey`щик
Регистрация: 30.05.2011
Сообщений: 4
Написано 0 полезных сообщений (для 0 пользователей)
|
Как назначить движение обьекта
Как назначить движение обьекта? любого, хоть это кубик хоть шарик))
|
(Offline)
|
|
31.05.2011, 21:16
|
#2
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Как назначить движение обьекта
http://forum.boolean.name/showthread.php?t=12657
в туторе есть скрипт, который вращает кубик, перемещать можно через transform.position = new Vector3(...), или transform.Move()
|
(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
|
Бывалый
Регистрация: 24.05.2011
Адрес: Украина,Харьков
Сообщений: 890
Написано 359 полезных сообщений (для 880 пользователей)
|
Ответ: Как назначить движение обьекта
_thisTransform.rotation = Quaternion.Slerp(_thisTransform.rotation, rot, maxAngle / 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
|
Бывалый
Регистрация: 24.05.2011
Адрес: Украина,Харьков
Сообщений: 890
Написано 359 полезных сообщений (для 880 пользователей)
|
Ответ: Как назначить движение обьекта
_thisTransform.rotation = Quaternion.Slerp(_thisTransform.rotation, rot, maxAngle / 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
|
Unity/C# кодер
Регистрация: 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; }
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 00:45.
|