2016-07-04 9 views
0

Я создаю 2D-скроллер-видеоролик в Unity с помощью C#. Я создал сценарий, который заставляет игрока смотреть в направлении, на которое была нажата клавиша со стрелкой (при нажатии правой стрелки игрок смотрит вправо. При нажатии левой стрелки игрок смотрит влево).Как стрелять снарядом в направлении, с которым сталкивается игрок?

Однако я не могу понять, как сделать гарпун, чтобы игрок стрелял в точку, в сторону которой находится игрок. Я нашел много вопросов о переполнении стека, задавая такие вопросы, но ни один из их ответов не работал для меня.

Может ли кто-нибудь рассказать мне, как сделать гарпун, когда игрок стреляет лицом в направлении, в котором находится игрок? Заранее спасибо!

Вот мой код, который я потребительных PLAYER SCRIPT

using UnityEngine; 
using System.Collections; 

public class playerMove : MonoBehaviour { 

// All Variables 
public float speed = 10; 
private Rigidbody2D rigidBody2D; 
private GameObject harpoon_00001; 
private bool facingRight = true; 

void Awake() { 

    rigidBody2D = GetComponent<Rigidbody2D>(); 
    harpoon_00001 = GameObject.Find("harpoon_00001"); 

} 

void Update() { 

if (Input.GetKeyDown(KeyCode.LeftArrow) && !facingRight) { 
    Flip(); 
} 

if (Input.GetKeyDown(KeyCode.RightArrow) && facingRight) { 
    Flip(); 
} 

} 

void Flip() { 

facingRight = !facingRight; 

Vector3 theScale = transform.localScale; 
theScale.x *= -1; 
transform.localScale = theScale; 

} 

void FixedUpdate() { 
    float xMove = Input.GetAxis("Horizontal"); 
    float yMove = Input.GetAxis("Vertical"); 

    float xSpeed = xMove * speed; 
    float ySpeed = yMove * speed; 

    Vector2 newVelocity = new Vector2(xSpeed, ySpeed); 

    rigidBody2D.velocity = newVelocity; 

    if (Input.GetKeyDown("space")) { 
     GetComponent<AudioSource>().Play(); 
    Instantiate(harpoon_00001,transform.position,transform.rotation); 

} 

} 
} 

Гарпун SCRIPT

using UnityEngine; 
using System.Collections; 

public class harpoonScript : MonoBehaviour { 

// Public variable 
public int speed = 6; 
private Rigidbody2D r2d; 

// Function called once when the bullet is created 
void Start() { 
// Get the rigidbody component 
r2d = GetComponent<Rigidbody2D>(); 

// Make the bullet move upward 
float ySpeed = 0; 
float xSpeed = -8; 

Vector2 newVelocity = new Vector2(xSpeed, ySpeed); 
r2d.velocity = newVelocity; 

} 

void Update() { 

if (Input.GetKeyDown(KeyCode.LeftArrow)) { 
    float xSpeed = -8; 
} 

if (Input.GetKeyDown(KeyCode.RightArrow)) { 
    float xSpeed = 8; 
} 

} 

void OnTriggerEnter2D(Collider2D other) //hero hits side of enemy 
{ 

     Destroy(other.gameObject.GetComponent<Collider2D>());  //Remove collider to avoid audio replaying 
     other.gameObject.GetComponent<Renderer>().enabled = false;  //Make object invisible 
     Destroy(other.gameObject, 0.626f); //Destroy object when  audio is done playing, destroying it before will cause the audio to stop 

} 

} 

ответ

0

Вы уже определив переменную facingRight знать направление игрок. Вы можете использовать это знание для управления гарпуном. Например:

// this line creates a new object, which has harpoonScript attached to it. 
// In unity editor, you drag and drop this prefab(harpoon_00001) into right place. 
// transform.position is used for the starting point of the fire. You can also add +-some_vector3 for better placement 
// Quaternion.identity means no rotation. 
harpoonScript harpoon = Instantiate(harpoon_00001,transform.position, Quaternion.identity) as harpoonScript; 
// Assuming harpoon prefab already facing to right 
if (!facingRight) { 
    // Maybe, not required 
    harpoon.transform.eulerAngles = new Vector3(0f, 0f, 180f); // Face backward 
    Vector3 theScale = harpoon.transform.localScale; 
    theScale.y *= -1; 
    harpoon.transform.localScale = theScale; // Flip on y axis 
} 
+0

Не могли бы вы объяснить, что 'Гарпун Гарпун = Instantiate (harpoon_00001, transform.position, Quaternion.identity) как Гарпун;' делает? Я новичок в C#, и я не уверен, что я понимаю, что это значит –

+0

Я пытался использовать ваш код, но Unity говорит, что 'Assets/Scripts/playerMove.cs (54,9): ошибка CS0246: Тип или имя пространства имен 'Harpoon 'не найдено. Вам не хватает директивы использования или ссылки на сборку? «Является ли Harpoon именем скрипта? Является ли Harpoon GameObject? –

+0

Извините за орфографию. Хапун - это ваш класс гарпунов. Но я просто набрал этот путь. –