Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2017, 09:59   #181
_Михаил_
Форумчанин
 
Аватар для _Михаил_
 
Регистрация: 11.04.2015
Сообщений: 221
По умолчанию

Подскажите как можно сделать поворот объекта на 90 градусов по клику. То есть кликнул по нему он повернулся, кликнул еще он опять повернулся и чтобы поворот был виден а не резко на 90 градусов, анимация не подходит
_Михаил_ вне форума Ответить с цитированием
Старый 23.09.2017, 11:03   #182
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

Поясните, пожалуйста, что значит, анимация не подходит? Не резкий, а плавный поворот - это и есть анимация. Анимация - это когда каждый кадр угол объекта (и/или его положение, и/или его масштаб) меняются. Или вы что-то другое имеете ввиду?
8Observer8 вне форума Ответить с цитированием
Старый 23.09.2017, 20:00   #183
_Михаил_
Форумчанин
 
Аватар для _Михаил_
 
Регистрация: 11.04.2015
Сообщений: 221
По умолчанию

То и значит что не подходит, объекты находящиеся на объекте который выполняет анимацию, могут проходить сквозь него.
_Михаил_ вне форума Ответить с цитированием
Старый 23.09.2017, 20:01   #184
_Михаил_
Форумчанин
 
Аватар для _Михаил_
 
Регистрация: 11.04.2015
Сообщений: 221
По умолчанию

Цитата:
public class Turn90Deg : MonoBehaviour {

public float turn_scale = 0.1f;
Quaternion next_turn = Quaternion.identity;
void Start () {

}

private void OnMouseDown()
{
Vector3 angles = transform.rotation.ToEulerAngles();
next_turn = Quaternion.identity;
next_turn.SetEulerRotation(angles.x , angles.y, angles.z + 3.14f / 2.0f);
}

void Update () {
transform.rotation = Quaternion.Slerp(transform.rotation , next_turn, turn_scale);
}
}
Вот это то что я искал
_Михаил_ вне форума Ответить с цитированием
Старый 23.09.2017, 20:13   #185
_Михаил_
Форумчанин
 
Аватар для _Михаил_
 
Регистрация: 11.04.2015
Сообщений: 221
По умолчанию

И вот еще 2 скрипта, оба ставятся на 1 объект

Цитата:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[RequireComponent(typeof(Spinner))]
public class RotateOnClick : MonoBehaviour
{
[SerializeField]
private Vector3 eulerAngles = new Vector3(0, 90, 0);
[SerializeField]
private float time = 1f;

private Spinner spinner;

private void Start()
{
spinner = GetComponent<Spinner>();
}

private void OnMouseDown()
{
if (!spinner.SpinningNow)
{
spinner.Rotate(transform, eulerAngles, time);
}
}
}
Цитата:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Spinner : MonoBehaviour
{
private Coroutine rotation;
private float lerpTime;

public bool SpinningNow { get; private set; }

public bool Rotate(Transform transform, Vector3 eulerAngles, float rotationTime)
{
if (SpinningNow)
return false;

lerpTime = rotationTime;
rotation = StartCoroutine(LerpRotation(transfo rm, transform.rotation.eulerAngles, transform.rotation.eulerAngles + eulerAngles));
return true;
}

public void Stop()
{
if (rotation != null)
{
StopCoroutine(rotation);
}
}

private IEnumerator LerpRotation(Transform transform, Vector3 fromEulerAngles, Vector3 toEulerAngles)
{
float t, time;
t = time = 0f;
Vector3 eulerAngles;

SpinningNow = true;
while (t < 1)
{
time += Time.deltaTime;
if (time > lerpTime)
{
time = lerpTime;
}
t = time / lerpTime;
eulerAngles = Vector3.Lerp(fromEulerAngles, toEulerAngles, t);
transform.rotation = Quaternion.Euler(eulerAngles);
yield return new WaitForEndOfFrame();
}
SpinningNow = false;
}
}
_Михаил_ вне форума Ответить с цитированием
Старый 03.10.2017, 12:58   #186
_Михаил_
Форумчанин
 
Аватар для _Михаил_
 
Регистрация: 11.04.2015
Сообщений: 221
По умолчанию

хочу сделать управление персонажем как в старых 2d играх с видом с верху. Ну то есть чтобы персонаж передвигался как бы по невидимой сетке.

когда держиш клавишу например W то перс движется в этом направлении, а кнопки A S D не реагируют. При отпускании перс останавливается и все кнопки становятся активны, а когда нажмешь кнопку, а не удерживаешь то чтобы перс как бы прошел расстояние от одной клетки до другой, ну то есть определенное расстояние а не сразу встал.

Схожее управление делалось в играх типа "Сокобан"
_Михаил_ вне форума Ответить с цитированием
Старый 03.11.2017, 10:47   #187
_Михаил_
Форумчанин
 
Аватар для _Михаил_
 
Регистрация: 11.04.2015
Сообщений: 221
По умолчанию

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

Цитата:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MouseLook : MonoBehaviour {
public enum RotationAxex {
MouseXAndY = 0,
MouseX = 1,
MouseY = 2
}
public RotationAxex axex = RotationAxex.MouseXAndY;

public float sensitivityHor = 9.0f;
public float sensitivityVert = 9.0f;

public float minimumVert = -45.0f;
public float maximumVert = 45.0f;

private float _rotationX = 0;

void Start () {
Rigidbody body = GetComponent<Rigidbody> ();
if (body != null)
body.freezeRotation = true;
}

void Update () {
if (axex == RotationAxex.MouseX) {
transform.Rotate (0, Input.GetAxis("Mouse X") * sensitivityHor, 0);
// это поворот в горизонтальной плоскости
}
else if (axex == RotationAxex.MouseY) {
_rotationX -= Input.GetAxis ("Mouse Y") * sensitivityVert;
_rotationX = Mathf.Clamp (_rotationX, minimumVert, maximumVert);

float rotationY = transform.localEulerAngles.y;

transform.localEulerAngles = new Vector3 (_rotationX, rotationY, 0);
//это поворот в вертикальной плоскости

}
else {
_rotationX -= Input.GetAxis ("Mouse Y") * sensitivityVert;
_rotationX = Mathf.Clamp (_rotationX, minimumVert, maximumVert);

float delta = Input.GetAxis ("Mouse X") * sensitivityHor;
float rotationY = transform.localEulerAngles.y + delta;

transform.localEulerAngles = new Vector3 (_rotationX, rotationY, 0);
//это комбинированный поворот
}
}
}
_Михаил_ вне форума Ответить с цитированием
Старый 03.11.2017, 10:51   #188
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Ну если вас устраивает результат без "заморозки" Rigidbody при старте скрипта, то может и не нужна.
p51x вне форума Ответить с цитированием
Старый 11.11.2017, 17:45   #189
_Михаил_
Форумчанин
 
Аватар для _Михаил_
 
Регистрация: 11.04.2015
Сообщений: 221
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Ну если вас устраивает результат без "заморозки" Rigidbody при старте скрипта, то может и не нужна.
Реджитбади на камере нет изначально, потому и спрашиваю, зачем она нужна, так как она бесполезна
_Михаил_ вне форума Ответить с цитированием
Старый 20.11.2017, 14:15   #190
coremission
Форумчанин
 
Аватар для coremission
 
Регистрация: 09.11.2017
Сообщений: 121
По умолчанию

Если нет, то можно удалять конечно)
Профессионально программирую видео-игры. Пишу бекстейдж-блог о разработке игр CoreMission.net.
Разрабатываю календарь выхода игр.
coremission вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа для онлайн игры gndjbs Фриланс 0 18.10.2012 15:19
бот для онлайн игры. Pein95 Общие вопросы Delphi 1 01.11.2011 06:28
Бои для онлайн игры. Abuhamed PHP 10 25.01.2011 15:39
Инструменты для онлайн игры lexesv Фриланс 4 30.08.2010 15:13