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=14816)

mcvarik 31.05.2011 21:11

Как назначить движение обьекта
 
Как назначить движение обьекта? любого, хоть это кубик хоть шарик))

pax 31.05.2011 21:16

Ответ: Как назначить движение обьекта
 
http://forum.boolean.name/showthread.php?t=12657
в туторе есть скрипт, который вращает кубик, перемещать можно через transform.position = new Vector3(...), или transform.Move()

Данил 05.09.2011 01:55

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

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

Цитата:

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 повторяется? может кто-нибудь детальнее объяснить этот синтаксис, не доходит до меня (

Lestar 05.09.2011 14:19

Ответ: Как назначить движение обьекта
 
PHP код:

_thisTransform.rotation Quaternion.Slerp(_thisTransform.rotationrotmaxAngle angle); 

Здесь поворачиваем на игрока.
PHP код:

_controller.Move(_thisTransform.forward moveSpeed Time.deltaTime); 

Здесь просто двигаемся вперед,что соответствует позиции игрока.

PHP код:

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

1-е ищем обьект Player
2-е получаем его трансформ

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

Данил 06.09.2011 10:30

Ответ: Как назначить движение обьекта
 
я понимаю, что здесь и здесь , строчки могу понятьт предназначение, но детально что в ней написано - в упор (

Lestar 06.09.2011 14:18

Ответ: Как назначить движение обьекта
 
PHP код:

_thisTransform.rotation Quaternion.Slerp(_thisTransform.rotationrotmaxAngle angle); 

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

В то время как в каждом фоейме мы поворачиваем enemy ,мы обьект так же двигаем вдоль локальной оси.
PHP код:

_controller.Move(_thisTransform.forward moveSpeed Time.deltaTime); 

Линк
Как еще более подробно написать я хз.

pax 21.09.2011 12:04

Ответ: Как назначить движение обьекта
 
PHP код:

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.

Пример:

PHP код:

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




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

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