AI

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

AI

Сообщение smorikb 17 янв 2013, 23:03

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class EnemyAI : MonoBehaviour {
        public Transform target;
        public int moveSpeed;
        public int rotationSpeed;
        public int maxdistance;
       
        private Transform myTransform;
       
        void Awake(){
                myTransform = transform;
        }


        void Start () {
                GameObject go = GameObject.FindGameObjectWithTag("Player");
               
                target = go.transform;
       
                maxdistance = 2;
        }
       

        void Update () {
                Debug.DrawLine(target.position, myTransform.position, Color.red);
               

                myTransform.position = Quaternion.Slerp(myTransform.position, Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed * Time.deltaTime);
               
                if(Vector3.Distance(target.position, myTransform.position) > maxdistance){
                //Move towards target
                myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
       
                }
        }
               
}



Плиз помогите выдает вот такую ошибку

Assets/Scripts/Enemy AI.cs(30,51): error CS1503: Argument `#1' cannot convert `UnityEngine.Vector3' expression to type
smorikb
UNIт
 
Сообщения: 96
Зарегистрирован: 29 авг 2012, 20:44

Re: AI

Сообщение BornFoRdeatH 17 янв 2013, 23:14

первое - Quaternion.Slerp у вас первый аргумент вектор вместо кватерниона, нужно передавать rotation вместо position
второе - вы не сможете присвоить кватернион вектору (myTransform.position = Quaternion.Slerp)
третье - в вашем случае нужно Vector3.Slerp либо myTransform.rotation
Не бойся, если ты один, бойся, если ты ноль.
BornFoRdeatH
Адепт
 
Сообщения: 2377
Зарегистрирован: 22 окт 2011, 23:41
Откуда: Украина
Skype: bornfordeath

Re: AI

Сообщение Medveckij 17 янв 2013, 23:30

BornFoRdeatH писал(а):первое - Quaternion.Slerp у вас первый аргумент вектор вместо кватерниона, нужно передавать rotation вместо position
второе - вы не сможете присвоить кватернион вектору (myTransform.position = Quaternion.Slerp)
третье - в вашем случае нужно Vector3.Slerp либо myTransform.rotation


Да вот строчка... и все работает.

Синтаксис:
Используется csharp
 myTransform.rotation = Quaternion.Slerp(myTransform.rotation, Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed * Time.deltaTime);
 


только скорости по умолчанию надо задать. 100% будет вопрос - почему лыжи не едут.

Синтаксис:
Используется csharp
 public int moveSpeed = 2;
 public int rotationSpeed = 2;
 


А вот это:

Синтаксис:
Используется csharp
 GameObject go = GameObject.FindGameObjectWithTag("Player");
               
 target = go.transform;
 


я бы записал вот так:

Синтаксис:
Используется csharp
target = GameObject.FindGameObjectWithTag("Player");
 


а далее уже обращался бы к трансформу.

а то у вас:

Синтаксис:
Используется csharp
 public Transform target;
 


неполноценный GO, а только лишь его transform.
Аватара пользователя
Medveckij
Адепт
 
Сообщения: 1014
Зарегистрирован: 10 ноя 2012, 15:44

Re: AI

Сообщение seaman 18 янв 2013, 08:01

неполноценный GO, а только лишь его transform.

И что? Если ГО не нужен, зачем каждый раз тратить время на получение его трансформа?
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: AI

Сообщение BornFoRdeatH 18 янв 2013, 08:56

seaman писал(а):И что? Если ГО не нужен, зачем каждый раз тратить время на получение его трансформа?


даже если и так мне кажется создавать переменную которая не используется это лишнее

Синтаксис:
Используется csharp
 target = GameObject.FindGameObjectWithTag("Player").transform;
 
Не бойся, если ты один, бойся, если ты ноль.
BornFoRdeatH
Адепт
 
Сообщения: 2377
Зарегистрирован: 22 окт 2011, 23:41
Откуда: Украина
Skype: bornfordeath

Re: AI

Сообщение seaman 18 янв 2013, 09:49

создавать переменную которая не используется это лишнее

После выхода из функции переменная автоматом удалится. Однако в однострочном варианте в конечном итоге будет меньше инструкций, т.е. он быстрее.
il код - двустрочный вариант:
.locals init (class [UnityEngine]UnityEngine.GameObject V_0)
ldstr "Player"
call class [UnityEngine]UnityEngine.GameObject [UnityEngine]UnityEngine.GameObject::FindGameObjectWithTag(string)
stloc.0
ldarg.0
ldloc.0
callvirt instance class [UnityEngine]UnityEngine.Transform [UnityEngine]UnityEngine.GameObject::get_transform()
stfld class [UnityEngine]UnityEngine.Transform Temp::tr
ret

il код - однострочный вариант:
ldarg.0
ldstr "Player"
call class [UnityEngine]UnityEngine.GameObject [UnityEngine]UnityEngine.GameObject::FindGameObjectWithTag(string)
callvirt instance class [UnityEngine]UnityEngine.Transform [UnityEngine]UnityEngine.GameObject::get_transform()
stfld class [UnityEngine]UnityEngine.Transform Temp::tr
ret
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: AI

Сообщение Medveckij 18 янв 2013, 14:33

seaman писал(а):
неполноценный GO, а только лишь его transform.

И что? Если ГО не нужен, зачем каждый раз тратить время на получение его трансформа?



В том случае если нужен только трансформ, то полностью согласен.
Аватара пользователя
Medveckij
Адепт
 
Сообщения: 1014
Зарегистрирован: 10 ноя 2012, 15:44


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 23