- Home /
Question by
Pablethe · Aug 28, 2017 at 12:30 AM ·
raycastvelocityrayinput.mouseposition
Directional Shot (!)
Hello !! I need help. I need to do in my game that the shot go where I touch on the screen of my cell phone. I searched everywhere, but I can not do it. With Ray?? :/
My Script Shot:
public void shootingFunction(){
if(Input.GetMouseButtonDown(0) && Time.time > nextFire && isDead == false)
{
MyPlayOneShot (lanzaShuriken);
anim.SetTrigger ("LanzaShuriken");
nextFire = Time.time + fireRate;
Instantiate(shot, shotSpawn.position, shotSpawn.rotation);
}
}
This script call 'shot', gameObject with the next Script:
public float speed;
public Rigidbody2D bullet;
void OnEnable()
{
bullet.velocity = transform.up * speed;
}
I tried to do a Ray method. But I did not know how to call it from my other Script 'shot'.
THANK YOUUUUUU
Comment
Answer by misher · Aug 28, 2017 at 10:20 AM
On mobile you should use Input Touch instead of GetMouseDown. Then use Camera.ScreenPointToRay passing touch position as an argument. Here is a simple example:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TapBullet : MonoBehaviour {
[Range(0.5f, 50f)]
public float bulletSpeed = 5f;
// Update is called once per frame
void Update () {
#if UNITY_EDITOR
if (Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
CreateBullet(ray);
}
#elif UNITY_ANDROID || UNITY_IOS
// if there is at least one touch detected this frame in its begin phase
if(Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began)
{
Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position);
CreateBullet(ray);
}
#endif
}
// on tap handler
private void CreateBullet(Ray ray)
{
//create sphere primitive
GameObject bullet = GameObject.CreatePrimitive(PrimitiveType.Sphere);
// set scale to 0.2m
bullet.transform.localScale = Vector3.one / 5f;
// set initial position to ray origin
bullet.transform.position = ray.origin;
// add rigidbody to the bullet gameobject
Rigidbody rb = bullet.AddComponent<Rigidbody>();
// disable gravity for bullet
rb.useGravity = false;
// set velocity vector same as ray direction
rb.velocity = ray.direction * bulletSpeed;
// destroy bullet after 5 seconds
Destroy(bullet, 5f);
}
}