Я создаю 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
}
}
Не могли бы вы объяснить, что 'Гарпун Гарпун = Instantiate (harpoon_00001, transform.position, Quaternion.identity) как Гарпун;' делает? Я новичок в C#, и я не уверен, что я понимаю, что это значит –
Я пытался использовать ваш код, но Unity говорит, что 'Assets/Scripts/playerMove.cs (54,9): ошибка CS0246: Тип или имя пространства имен 'Harpoon 'не найдено. Вам не хватает директивы использования или ссылки на сборку? «Является ли Harpoon именем скрипта? Является ли Harpoon GameObject? –
Извините за орфографию. Хапун - это ваш класс гарпунов. Но я просто набрал этот путь. –