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

Huruffus 09.08.2012 18:53

Ответ: следование объекта за мышью
 
получаю переменную "speed" из другого класса. нажимаю debug в monoDevelop, он не ругается. Запускаю игру нажимаю "Е" и в консоли появляется такое сообщение:
NullReferenceException: Object reference not set to an instance of an object
takeObject.Update () (at Assets/scripts/takeObject.cs:16)

весь скрипт не работает. Подскажите пожалуйста как исправить?

собственно скрипт:
Код:

using UnityEngine;
using System.Collections;

public class takeObject : MonoBehaviour {
        public GameObject takingHands;
        public Ray _ray;
        public RaycastHit _hit;
        public float speed;
       
        void Start () {
               
        }
       
        void Update () {
                speed = GetComponent<char2>().speed;  //////ОШИБОЧНАЯ СТРОЧКА
               
                if (Input.GetKeyUp(KeyCode.E)){
                        _ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                        if (collider.Raycast(_ray, out _hit, 10)){                                               
                                //originTransformTakingHands.transform.position = transform.position;
                                rigidbody.isKinematic = true;
                                _hit.collider.transform.parent = Camera.main.transform;
                                transform.position = takingHands.transform.position;
                        }
                }
                if (gameObject.transform.parent != null){
                        if (Input.GetKey(KeyCode.F)){
                                        print ("F - entered");//
                                        transform.parent = null;
                                        rigidbody.isKinematic = false;
                                        gameObject.rigidbody.AddForce(Camera.main.transform.forward * speed, ForceMode.Impulse);
                                }       
                }
        }
}


pax 09.08.2012 19:55

Ответ: следование объекта за мышью
 
На этом же объекте висит компонент char2?

Huruffus 09.08.2012 20:01

Ответ: следование объекта за мышью
 
нет. Char2 - это скрипт движения персонажа. Висит на капсуле.
а takeObject - это скрипт, позволяющий подобрать предмет, на котором висит этот скрипт

pax 09.08.2012 20:06

Ответ: следование объекта за мышью
 
Так вот, ты пытаешься получить компонент Char2 с этого объекта, а не с капсулы.

Попробуй следующим образом:
PHP код:

using UnityEngine;
using System.Collections;

public class 
takeObject MonoBehaviour {
    public 
GameObject takingHands;
    public 
Ray _ray;
    public 
RaycastHit _hit;
    public 
float speed;
        private 
char2 _char2;
    
    
void Start () {
        
_char2 = (char2)FindObjectOfType(typeof(char2));
    }
    

    
void Update () {
        
speed _char2 .speed;  //////ОШИБОЧНАЯ СТРОЧКА
        
        
if (Input.GetKeyUp(KeyCode.E)){
            
_ray Camera.main.ScreenPointToRay(Input.mousePosition);
            if (
collider.Raycast(_rayout _hit10)){                        
                
//originTransformTakingHands.transform.position = transform.position;
                
rigidbody.isKinematic true;
                
_hit.collider.transform.parent Camera.main.transform;
                
transform.position takingHands.transform.position;
            }
        }
        if (
gameObject.transform.parent != null){
            if (
Input.GetKey(KeyCode.F)){
                    print (
"F - entered");//
                    
transform.parent null;
                    
rigidbody.isKinematic false;
                    
gameObject.rigidbody.AddForce(Camera.main.transform.forward speedForceMode.Impulse);
                }    
        }
    }



Huruffus 09.08.2012 21:15

Ответ: следование объекта за мышью
 
здорово! спасибо.

т.е. вы создали собственный тип переменной... дальше не понимаю

_char2 = (char2)FindObjectOfType(typeof(char2));

Объясните пожалуйста:
1. что значат скобки вокруг char2;
2. ...(typeof(char2)); что обозначает typeof?

мне понятно, что значит эта запись, но только туманно. мы ищем объект типа char2 и присваиваем его переменной _char2. Хочется конкретики по каждой из команд.

pax 09.08.2012 21:19

Ответ: следование объекта за мышью
 
1. приведение типа UnityEngine.Object (который возвращает функция FindObjectOfType) к типу char2
2. получение типа char2

Huruffus 10.08.2012 18:32

Ответ: следование объекта за мышью
 
Вложений: 1
скажите пожалуйста, почему такую ошибку выдаёт? (скрин)

Huruffus 10.08.2012 18:34

Ответ: следование объекта за мышью
 
http://youtu.be/KeCFk4bJOKA?t=10m56s

в этом туториале так написано и работает

pax 10.08.2012 19:41

Ответ: следование объекта за мышью
 
потому что Vertical

Huruffus 10.08.2012 20:27

Ответ: следование объекта за мышью
 
исправил, но ошибка так и осталась :(

pax 10.08.2012 20:29

Ответ: следование объекта за мышью
 
а, не прочитал ошибку) Вероятно был в туторе js
PHP код:

if((Input.GetAxis("Horizontal")!= 0f) && (Input.GetAxis("Vertical")!= 0f) ) 


Huruffus 12.08.2012 19:36

Ответ: следование объекта за мышью
 
Вложений: 1
Здравствуйте!
Создаю анимацию в Blender3d для камеры в Unity3d.

создал анимацию (смотрите скриншот), экспортировал в Unity, написал скрипт для проигрывания анимации при передвижении. Работает.

НО!

Камера анимирована по оси Z. Когда нажимаешь клавишу для передвижения, начинает проигрываться анимация, но становиться не возможно наклонять камеру вперёд-назад во время проигрывания анимации.

Кто-нибудь знает в чём может быть дело?

Пример покачивания камеры видел, делу не помогло (там где ходишь зимой по снегу).

Скрипт анимации:

PHP код:

using UnityEngine;
using System.Collections;

public class 
animationCamera MonoBehaviour {
    public 
AnimationClip kuch;
    
    
void Start () {
        
animation.AddClip(kuch"kuch");
    }

    
void Update () {
        if (
Input.GetKey(KeyCode.W)) {
            
Animate ();
        }
    }
    
void Animate () {        
        
animation.Play("kuch");
    }



pax 12.08.2012 22:04

Ответ: следование объекта за мышью
 
Так это, камеру дочерним объектом сделай и делай с ней что хочешь.

Huruffus 12.08.2012 22:54

Ответ: следование объекта за мышью
 
Вложений: 1
сейчас покажу иерархию

pax 12.08.2012 22:59

Ответ: следование объекта за мышью
 
Ну и в чем проблема? Удали компоненты с камеры для этого нода, поставь камеру внутрь иерархии, на ней такие же компоненты повесь для управления.


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

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