- Home /
NullReferenceException: Object reference not set to an instance of an object [Camera Moving Setting for Android]
Hey Guys,
I am newbie in Unity.
I have a problem when I would implement the moving camera for Android with touching the screen.
When I start in unity, directly the camera [instance] in the inspector is missing and it shows "NullReferenceException: Object reference not set to an instance of an object TouchCameraControl.Update () (at Assets/Scripts/TouchCameraControl.cs:28)"
I am really looking for the insight from all of you guys.
" using UnityEngine; using System.Collections;
// touch camera control public class TouchCameraControl : MonoBehaviour { public float moveSensitivityX = 1.0f; public float moveSensitivityY = 1.0f; public bool updateZoomSensivitiy = true; public float orthoZoomSpeed = 0.05f; public float minZoom = 1.0f; public float maxZoom = 20.0f; public bool invertMoveX = false; public bool invertMoveY = false;
public Camera cam;
void Start()
{
cam = Camera.main;
}
// update the mouse sensitivity
void Update()
{
if(updateZoomSensivitiy)
{
moveSensitivityX = cam.orthographicSize / 5.0f;
moveSensitivityY = cam.orthographicSize / 5.0f;
}
Touch[] touches = Input.touches;
if(touches.Length > 0) // to validate the length of touches in screen
{
// single touch (move)
if(touches.Length == 1)
{
if(touches[0].phase == TouchPhase.Moved)
{
Vector2 delta = Input.touches[0].deltaPosition; // difference between the touch position of current frame and the touch position of previous frame
float positionX = delta.x * moveSensitivityX * Time.deltaTime;
positionX = invertMoveX ? positionX : positionX * - 1;
float positionY = delta.y * moveSensitivityY * Time.deltaTime;
positionY = invertMoveX ? positionY : positionY * -1;
cam.transform.position += new Vector3(positionX, positionY, 0);
}
}
// double touch (zoom)
if(touches.Length == 2)
{
Touch touchOne = touches[0];
Touch touchTwo = touches[1];
Vector2 touchOnePrevPos = touchOne.position - touchOne.deltaPosition;
Vector2 touchTwoPrevPos = touchTwo.position - touchTwo.deltaPosition;
float prevTouchDeltaMag = (touchOnePrevPos - touchTwoPrevPos).magnitude;
float touchDeltaMag = (touchOne.position - touchTwo.position).magnitude;
float deltaMagDiff = prevTouchDeltaMag - touchDeltaMag;
cam.orthographicSize += deltaMagDiff * orthoZoomSpeed;
cam.orthographicSize = Mathf.Clamp(cam.orthographicSize, minZoom, maxZoom);
}
}
}
}
"
][2]
Did you try to remove public camera object and attach script to main camera? And also change "cam" with "this".
Answer by TRG96 · Mar 11, 2015 at 04:57 PM
What is this script attached to? why dont you add a camera to the scene and attach the script to it and get rid of cam = Camera.main. If the script is attached to the camera then you can directly access its functions.
Hey TRG,
I attached the script to the main camera. I will try to implement your suggestion.
Thanks
Please post follow-up information and any non-answer as a comment rather than as an answer. $$anonymous$$ind regards,
Your answer
Follow this Question
Related Questions
Cross platform camera controlls 0 Answers
moving camera in increments, with Touch 0 Answers
tween Path animation & touch control 1 Answer
Android touches called the Input.GetAxis('Mouse X') 0 Answers
Camera Controls 2 Answers