Tokyo Ghoul
Гуру
(2839)
6 месяцев назад
да тут легче можно.
1. Добавь компоненту Rigidbody к персонажу.
2. Выбери для персонажа коллайдер, например, капсульный коллайдер.
3. Создай коллайдер на стене, например, коробочный коллайдер.
4. Перемещай персонажа с помощью функции Rigidbody.MovePosition или задавая скорость с помощью Rigidbody.velocity = new Vector3(newVelocity).
5.Убедиcь что флажок «Is Kinematic» компонента Rigidbody персонажа снят (установлено значение false).
Лев ЕровУченик (239)
6 месяцев назад
Не знаешь случайно, как в Rigidbody.MovePosition задать скорость передвижения?
Лев ЕровУченик (239)
6 месяцев назад
Assets\resources\script\movePlayer.cs(22,25): error CS1503: Argument 1: cannot convert from 'float' to 'UnityEngine.Vector3'
Лев ЕровУченик (239)
6 месяцев назад
float step = speed * Time.deltaTime;
m_Rigidbody.AddForce((int) 5 * Time.deltaTime, ForceMode.VelocityChange);
m_Rigidbody.MovePosition(destPos);
if (transform.position == destPos) isMoving = false;
Лев ЕровУченик (239)
6 месяцев назад
Все что я отредактировал:
Rigidbody m_Rigidbody;
public float speed = 5.0f;
public float cellSize = 1.0f;
bool isMoving = false;
Vector3 direction;
Vector3 destPos;
void Start() {
m_Rigidbody = GetComponent();
}
void Update()
{
if (isMoving == true)
{
float step = speed * Time.deltaTime;
m_Rigidbody.AddForce(5 * Time.deltaTime, ForceMode.VelocityChange);
m_Rigidbody.MovePosition(destPos);
if (transform.position == destPos) isMoving = false;
Лев ЕровУченик (239)
6 месяцев назад
Сделал понятнее
Rigidbody m_Rigidbody;
public float speed = 5.0f;
public float cellSize = 1.0f;
bool isMoving = false;
Vector3 direction;
Vector3 destPos;
void Start() {
m_Rigidbody = GetComponent();
}
void Update()
{
if (isMoving == true)
{
float step = speed * Time.deltaTime;
m_Rigidbody.AddForce(5 * Time.deltaTime, ForceMode.VelocityChange);
m_Rigidbody.MovePosition(destPos);
if (transform.position == destPos) isMoving = false;
using UnityEngine;
using System.Collections;
public class MotionController : MonoBehaviour
{
public float speed = 5.0f;
public float cellSize = 1.0f;
bool isMoving = false;
Vector3 direction;
Vector3 destPos;
void Update()
{
if (isMoving == true)
{
float step = speed * Time.deltaTime;
transform.position = Vector3.MoveTowards(transform.position, destPos, step);
if (transform.position == destPos) isMoving = false;
}
else
{
if (Input.GetKeyDown(KeyCode.W))
{
direction = Vector3.forward;
destPos = transform.position + direction * cellSize;
isMoving = true;
}
if (Input.GetKeyDown(KeyCode.A))
{
direction = Vector3.left;
destPos = transform.position + direction * cellSize;
isMoving = true;
}
if (Input.GetKeyDown(KeyCode.D))
{
direction = Vector3.right;
destPos = transform.position + direction * cellSize;
isMoving = true;
}
if (Input.GetKeyDown(KeyCode.S))
{
direction = Vector3.back;
destPos = transform.position + direction * cellSize;
isMoving = true;
}
}
}
}