- Home /
GetComponet() returning null with require component script
Hi! I take the ThirdPersonUserControl script and change a few lines to move the player through websocket. The problem is that it keeps returing null when I get the ThirdPersonCharacter. That should NOT happen since I add the require typeof before the class.
using UnityEngine;
using System.Collections;
using LitJson;
using UnityStandardAssets.CrossPlatformInput;
using UnityStandardAssets.Characters.ThirdPerson;
[RequireComponent (typeof (ThirdPersonCharacter))]
public class WebSocketInputController : MonoBehaviour {
private ThirdPersonCharacter m_Character; // A reference to the ThirdPersonCharacter on the object
private Transform m_Cam; // A reference to the main camera in the scenes transform
private Vector3 m_CamForward; // The current forward direction of the camera
private Vector3 m_Move; // the world-relative desired move direction, calculated from the camForward and user input.
// Use this for initialization
void Start () {
// get the transform of the main camera
if (Camera.main != null) {
m_Cam = Camera.main.transform;
} else {
Debug.LogWarning (
"Warning: no main camera found. Third person character needs a Camera tagged \"MainCamera\", for camera-relative controls.");
// we use self-relative controls in this case, which probably isn't what the user wants, but hey, we warned them!
}
// get the third person character ( this should never be null due to require component )
m_Character = GetComponent<ThirdPersonCharacter> ();
if (m_Character == null) {
Debug.LogError("Dude! It's not getting the component!");
}
NotificationCenter.DefaultCenter().AddObserver(this, "Move");
}
// Update is called once per frame
void Update () {
Vector2 move = new Vector2(
CrossPlatformInputManager.GetAxis ("Horizontal"),
CrossPlatformInputManager.GetAxis("Vertical")
);
if (move != Vector2.zero) {
Debug.Log(JsonMapper.ToJson(move));
GameManager.Instance.WebSocket.SendUTF8 (JsonMapper.ToJson (move));
NotificationCenter.DefaultCenter().PostNotification(this, "Move", move);
}
}
private void Move(Notification notification) {
Vector2 move = (Vector2) notification.data;
// calculate move direction to pass to character
if (m_Cam != null) {
// calculate camera relative direction to move:
m_CamForward = Vector3.Scale (m_Cam.forward, new Vector3 (1, 0, 1)).normalized;
m_Move = move.y * m_CamForward + move.x * m_Cam.right;
} else {
// we use world-relative directions in the case of no main camera
m_Move = move.y * Vector3.forward + move.x * Vector3.right;
}
// pass all parameters to the character control script
m_Character.Move (m_Move, false, false);
}
}
There is the entire class. Thanks in advance!
PS: I remove the crunch and jump cause I don't need them. Just need the player to move arround.
Did you try removing this class and re-adding it back? Unity seems to glitch on me whenever I use RequireComponent, removing the script (plus any component that it actually requires) and then re-adding it seems to fix it for me.
Also, do you have two classes named ThirdPersonCharacter?
Answer by michaeljota · Aug 12, 2015 at 04:20 PM
I solve it. I don't have two clases named ThridPersonCharacter, but I did have the script added to two objects. Also, the second object did not respond to the "RequireComponent". I asume that I add ir before I code the "RequireComponent".
Sorry for that. Thanks anyway!
Your answer
Follow this Question
Related Questions
Why is this null? Finding a script on an object 3 Answers
Object reference not set to an instance of an object in c#. 0 Answers
NullReferenceException. GetComponent dose not work properly 2 Answers
NullReferenceException - Editor script using GetComponent after AddComponent 1 Answer
NullRef on my parent script 1 Answer