- Home /
how to use right stc on gamepad like Input.mousePosition
hi im making a 2d platformer game and i want a grappling hook in the game i know how to make a grappling hook for a mouse and keyboard but how to use right stick on gamepad like Input.mousePosition
please help me. This is my script for the grappling hook
using UnityEngine;
public class Tutorial_GrapplingGun : MonoBehaviour
{
[Header("Scripts Ref:")]
public Tutorial_GrapplingRope grappleRope;
[Header("Layers Settings:")]
[SerializeField] private bool grappleToAll = false;
[SerializeField] private int grappableLayerNumber = 9;
[Header("Main Camera:")]
public Camera m_camera;
[Header("Transform Ref:")]
public Transform gunHolder;
public Transform gunPivot;
public Transform firePoint;
[Header("Physics Ref:")]
public SpringJoint2D m_springJoint2D;
public Rigidbody2D m_rigidbody;
[Header("Rotation:")]
[SerializeField] private bool rotateOverTime = true;
[Range(0, 60)] [SerializeField] private float rotationSpeed = 4;
[Header("Distance:")]
[SerializeField] private bool hasMaxDistance = false;
[SerializeField] private float maxDistnace = 20;
private enum LaunchType
{
Transform_Launch,
Physics_Launch
}
[Header("Launching:")]
[SerializeField] private bool launchToPoint = true;
[SerializeField] private LaunchType launchType = LaunchType.Physics_Launch;
[SerializeField] private float launchSpeed = 1;
[Header("No Launch To Point")]
[SerializeField] private bool autoConfigureDistance = false;
[SerializeField] private float targetDistance = 3;
[SerializeField] private float targetFrequncy = 1;
[HideInInspector] public Vector2 grapplePoint;
[HideInInspector] public Vector2 grappleDistanceVector;
private void Start()
{
grappleRope.enabled = false;
m_springJoint2D.enabled = false;
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.Mouse0))
{
SetGrapplePoint();
}
else if (Input.GetKey(KeyCode.Mouse0))
{
if (grappleRope.enabled)
{
RotateGun(grapplePoint, false);
}
else
{
Vector2 mousePos = m_camera.ScreenToWorldPoint(Input.mousePosition);
RotateGun(mousePos, true);
}
if (launchToPoint && grappleRope.isGrappling)
{
if (launchType == LaunchType.Transform_Launch)
{
Vector2 firePointDistnace = firePoint.position - gunHolder.localPosition;
Vector2 targetPos = grapplePoint - firePointDistnace;
gunHolder.position = Vector2.Lerp(gunHolder.position, targetPos, Time.deltaTime * launchSpeed);
}
}
}
else if (Input.GetKeyUp(KeyCode.Mouse0))
{
grappleRope.enabled = false;
m_springJoint2D.enabled = false;
m_rigidbody.gravityScale = 1;
}
else
{
Vector2 mousePos = m_camera.ScreenToWorldPoint(Input.mousePosition);
RotateGun(mousePos, true);
}
}
void RotateGun(Vector3 lookPoint, bool allowRotationOverTime)
{
Vector3 distanceVector = lookPoint - gunPivot.position;
float angle = Mathf.Atan2(distanceVector.y, distanceVector.x) * Mathf.Rad2Deg;
if (rotateOverTime && allowRotationOverTime)
{
gunPivot.rotation = Quaternion.Lerp(gunPivot.rotation, Quaternion.AngleAxis(angle, Vector3.forward), Time.deltaTime * rotationSpeed);
}
else
{
gunPivot.rotation = Quaternion.AngleAxis(angle, Vector3.forward);
}
}
void SetGrapplePoint()
{
Vector2 distanceVector = m_camera.ScreenToWorldPoint(Input.mousePosition) - gunPivot.position;
if (Physics2D.Raycast(firePoint.position, distanceVector.normalized))
{
RaycastHit2D _hit = Physics2D.Raycast(firePoint.position, distanceVector.normalized);
if (_hit.transform.gameObject.layer == grappableLayerNumber || grappleToAll)
{
if (Vector2.Distance(_hit.point, firePoint.position) <= maxDistnace || !hasMaxDistance)
{
grapplePoint = _hit.point;
grappleDistanceVector = grapplePoint - (Vector2)gunPivot.position;
grappleRope.enabled = true;
}
}
}
}
public void Grapple()
{
m_springJoint2D.autoConfigureDistance = false;
if (!launchToPoint && !autoConfigureDistance)
{
m_springJoint2D.distance = targetDistance;
m_springJoint2D.frequency = targetFrequncy;
}
if (!launchToPoint)
{
if (autoConfigureDistance)
{
m_springJoint2D.autoConfigureDistance = true;
m_springJoint2D.frequency = 0;
}
m_springJoint2D.connectedAnchor = grapplePoint;
m_springJoint2D.enabled = true;
}
else
{
switch (launchType)
{
case LaunchType.Physics_Launch:
m_springJoint2D.connectedAnchor = grapplePoint;
Vector2 distanceVector = firePoint.position - gunHolder.position;
m_springJoint2D.distance = distanceVector.magnitude;
m_springJoint2D.frequency = launchSpeed;
m_springJoint2D.enabled = true;
break;
case LaunchType.Transform_Launch:
m_rigidbody.gravityScale = 0;
m_rigidbody.velocity = Vector2.zero;
break;
}
}
}
private void OnDrawGizmosSelected()
{
if (firePoint != null && hasMaxDistance)
{
Gizmos.color = Color.green;
Gizmos.DrawWireSphere(firePoint.position, maxDistnace);
}
}
}
What you want to do is set the cursor position to be controlled by the stick. Another way of doing it would be to control the angle of a ray from the player, visible to the player) and shoot it that way. There are probably a few other methods of doing it as well.
Your answer
Follow this Question
Related Questions
error CS1525: unexpected symbol. How do I fix this and why am I getting this error? 1 Answer
Help with a simple procedural generation 0 Answers
Help change the subject of this Script 1 Answer
[C#] Quaternion Rotations with Input.GetAxis problems. 1 Answer
How do I make it so it spawns 1 clone instead of 2? 2 Answers