Форум программистов, компьютерный форум, киберфорум
Наши страницы
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
 
fkty
1 / 1 / 1
Регистрация: 06.01.2013
Сообщений: 266
#1

SpaceWar - Unity, Unity3D

06.09.2015, 19:53. Просмотров 283. Ответов 6
Метки нет (Все метки)

Здравствуйте, помогите найти ошибку в скрипте (выдает ошибку на 20 строчке):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using UnityEngine;
using System.Collections;
 
public class MoveTowardsPlayer : MonoBehaviour {
    // Переменная для координат объекта player
    private Transform player;
    
    // Скорость движения врага
    public float speed = 1.5f;
    
    // Use this for initialization
    void Start ()
    {
        player = GameObject.Find("playerShip").transform;
    }
    
    // Update is called once per frame
    void Update ()
    {
        Vector3 delta = player.position – transform.position;
        delta.Normalize();
        float moveSpeed = speed * Time.deltaTime;
        transform.position = transform.position + (delta * moveSpeed);
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Cr0c
526 / 427 / 158
Регистрация: 06.08.2015
Сообщений: 1,831
Завершенные тесты: 2
06.09.2015, 23:08 #2
Цитата Сообщение от fkty Посмотреть сообщение
Vector3 delta = player.position – transform.position;
C#
1
Vector3 delta = player.position - transform.position;
У Вас там ТОЧНО минус, а не похожий символ?
0
8Observer8
2040 / 1333 / 217
Регистрация: 05.10.2013
Сообщений: 4,235
Записей в блоге: 56
08.09.2015, 09:51 #3
Чаще всего, движущийся объект должен иметь компонент RigidBody.

Тогда ваш скрипт можно переписать, примерно, так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
using UnityEngine;
using System.Collections;
 
public class MoveTowards : MonoBehaviour
{
    public float speed = 3f;
    public Transform target;
 
    void FixedUpdate ()
    {
        var dir = target.transform.position - transform.position;
        GetComponent<Rigidbody>().velocity = dir.normalized * speed;
    }
}
0
Cr0c
526 / 427 / 158
Регистрация: 06.08.2015
Сообщений: 1,831
Завершенные тесты: 2
08.09.2015, 11:18 #4
Как видно из сообщений, арифметические операции подсвечиваются, а у него в строке с ошибкой минус не подсвечен. Чисто синтаксическая ошибка. Если дело не в этом - то отписаться надо. Если в этом - тоже.
0
8Observer8
2040 / 1333 / 217
Регистрация: 05.10.2013
Сообщений: 4,235
Записей в блоге: 56
08.09.2015, 13:39 #5
Да, это точно с минусом проблема.

Я опять не по теме сейчас. Если не использовать RigidBody, а делать через transform.position, то всё-равно можно короче написать:
C#
1
2
3
4
5
6
7
8
9
10
11
12
using UnityEngine;
 
public class MoveTowards : MonoBehaviour
{
    public float speed = 3f;
    public Transform target;
 
    void Update()
    {
        transform.position = Vector3.MoveTowards( transform.position, target.transform.position, Time.deltaTime * speed);
    }
}
0
Cr0c
526 / 427 / 158
Регистрация: 06.08.2015
Сообщений: 1,831
Завершенные тесты: 2
09.09.2015, 10:00 #6
Короче - не значит лучше. Через Rigidbody делают для корректной работы физики, т.к. есть скорость и масса тела = взаимодействие объектов, а через transform.position оно не будет правильно.
0
8Observer8
2040 / 1333 / 217
Регистрация: 05.10.2013
Сообщений: 4,235
Записей в блоге: 56
09.09.2015, 11:00 #7
Я имел ввиду, короче если сравнивать вариант ТС и вариант с MoveTowards.
0
09.09.2015, 11:00
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru