簡體   English   中英

如何將彈丸射向玩家所面對的方向?

[英]How Do I Shoot a Projectile into the Direction the Player is Facing?

我正在使用c#在Unity中創建2D側滾動視頻游戲。 我創建了一個腳本,使玩家面對被按下的箭頭鍵指向的方向(當按下向右箭頭時,玩家面對右。當按下向左箭頭時,玩家面向左)。

但是,我無法弄清楚如何使玩家射擊的魚叉指向玩家所面對的方向。 我在Stack Overflow上發現了很多這樣的問題,但他們的答案都對我沒有用。

誰能告訴我如何使玩家射擊的魚叉面對玩家面對的方向? 提前致謝!

這是我使用的代碼-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);

}

} 
}

魚叉腳本

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

}

}

您已經定義了一個變量FaceingRight來知道播放器的方向。 您可以使用該知識來控制魚叉。 例如:

// 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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM