- Home /
 
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);
     }
 } 
 
               
Answer by sirofjava · Jan 04, 2018 at 08:31 PM
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
hey man i try to do what you said but it doesnt function in my project (i tried to do in a new project for testing and it was right as you said addding plan ins$$anonymous$$d of terrain but in my project main project it doesnt function even with plan :( Help pls
Your answer