issue with Virtual Joystick

Hello all

Kindly I facing 2 issues with my Virtual Joystick developed over unity5 , kindly I need your support to solve the issue where I have 2 Virtual Joysticks one for player moving (Gris color) and the second for camera (orange color) please see the following screenshoot:

My issues as the following:
1- For the Virtual Joystick responsible about the player moving , the player object not rotate in the same direction of the Joystick pressed , its moving in all direction but not facing the same direction of the Joystick pressed .
2- The camera can see through the Terrain “ground ” how to prevent that.

The script im using from Virtual Joystick :
using UnityEngine; using System.Collections; using UnityEngine.UI; using UnityEngine.EventSystems;

public class VirtualJoystick : MonoBehaviour,IDragHandler,IPointerUpHandler,IPointerDownHandler {

private Image bgImg;
private Image joystickImg;
public Vector3 InputDirection{ set; get;}
// Use this for initialization
void Start () {
    bgImg = GetComponent<Image> ();
    joystickImg = transform.GetChild (0).GetComponent<Image> ();
    InputDirection = Vector3.zero;

}

// Update is called once per frame
//void Update () {

//}
public virtual void OnDrag(PointerEventData ped)
{
    Vector2 pos = Vector2.zero;
    if (RectTransformUtility.ScreenPointToLocalPointInRectangle
        (bgImg.rectTransform,
            ped.position,
            ped.pressEventCamera,
            out pos)) {
        pos.x=(pos.x/bgImg.rectTransform.sizeDelta.x);
        pos.y=(pos.y/bgImg.rectTransform.sizeDelta.y);
        float x=(bgImg.rectTransform.pivot.x==1) ? pos.x*2+1 : pos.x*2-1;
        float y=(bgImg.rectTransform.pivot.y==1) ? pos.y*2+1 : pos.y*2-1;
        InputDirection=new Vector3(x,0,y);
        InputDirection=(InputDirection.magnitude>1) ? InputDirection.normalized : InputDirection;

        joystickImg.rectTransform.anchoredPosition=
            new Vector3(InputDirection.x*(bgImg.rectTransform.sizeDelta.x/3),InputDirection.z*(bgImg.rectTransform.sizeDelta.y/3));
        Debug.Log(InputDirection);
    }

}
public virtual void OnPointerDown(PointerEventData ped)
{
    OnDrag (ped);

}
public virtual void OnPointerUp(PointerEventData ped)
{

    //Here is the problem it just goes to zero so fast so my character also moves so fast...how can i make it so motth
    InputDirection =Vector3.zero;
    joystickImg.rectTransform.anchoredPosition =Vector3.zero;
}

}

The script im using for camera :

using UnityEngine;
using System.Collections;

public class FreeCamera : MonoBehaviour {
    public Transform lookAt;
    public VirtualJoystick camerajs;
    private float distance = 200.0f;
    private float currentx = 0.0f;
    private float currenty = 0.0f;
    private float sensitivityx = 1.0f;
    private float sensitivityy = 1.0f;
    private void Update()
    {
        currentx += camerajs.InputDirection.x * sensitivityx;
        currenty += camerajs.InputDirection.z * sensitivityy;
    }
    private void LateUpdate()
    {
        Vector3 dir = new Vector3(0, 0, -distance);
        Quaternion rotation = Quaternion.Euler(currenty, currentx, 0);
        transform.position = lookAt.position + rotation * dir;
        transform.LookAt(lookAt);
    }
} 

this issue is solved after doing the following
1- Add plan instead of terrain
2- Remove the plan default collider
3- Add box collider to the plan
4- adding box collider to the target
the issue related to camera raycast

thank you for this info :slight_smile: