Кватернион (вращение) моей функции Instantiate работает неправильно.C#

Место общения программистов C#
Ответить
Anonymous
 Кватернион (вращение) моей функции Instantiate работает неправильно.

Сообщение Anonymous »

У меня есть пушка в моем игровом объекте Player, у меня есть файл PlayerController.cs в моем объекте Player, содержимое которого приведено ниже. Кроме того, у меня есть пушечное ядро, которое я могу бросить. Но когда я использую префаб Instantiate, я хочу, чтобы создаваемый элемент использовал вращение моего игрока, но это не так, вы можете мне помочь?

Код: Выделить всё

using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
[SerializeField]
public GameObject CannonBall;
[SerializeField]
public GameObject player;
[SerializeField]
public GameObject FirePoint;
[SerializeField]
public GameObject BallsObject;

// Camera Movement
private float camSpeed;

private float camAxisX;
private float camAxisY;

// Character Movement
private float speed;

private float minX;
private float minZ;

private float maxX;
private float maxZ;

private bool touched = false;

private float horizontalInput;
private float verticalInput;
void Start()
{
StartGame();
}
private void Update()
{

}
void FixedUpdate()
{
if (Input.GetButton("Fire1"))
{
FireCannon();
}

GetPlayerAxis();
RotateChar();
MoveChar();
}
void StartGame()
{

speed = 8f;
camSpeed = 500f;
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
}
void RotateChar()
{
player.transform.Rotate(Vector3.up * Time.deltaTime * camSpeed * camAxisX);
player.transform.Rotate(Vector3.left * Time.deltaTime * camSpeed * camAxisY);
player.gameObject.transform.localEulerAngles = new Vector3(player.gameObject.transform.localEulerAngles.x, player.gameObject.transform.localEulerAngles.y, 0);

}
void MoveChar()
{
if (!touched)
{
transform.Translate(Vector3.right * horizontalInput * speed * Time.deltaTime);
transform.Translate(Vector3.forward * verticalInput * speed * Time.deltaTime);
}
}
void GetPlayerAxis()
{

camAxisX = Input.GetAxis("Mouse X");
camAxisY = Input.GetAxis("Mouse Y");
horizontalInput = Input.GetAxis("Horizontal");
verticalInput = Input.GetAxis("Vertical");
}
void FireCannon()
{
print(player.gameObject.transform.localRotation.eulerAngles);
GameObject newBall = (GameObject)Instantiate(CannonBall, FirePoint.transform.position, Quaternion.Euler(player.gameObject.transform.localRotation.eulerAngles), BallsObject.transform);
newBall.transform.localRotation = Quaternion.Euler(player.gameObject.transform.localRotation.eulerAngles);
}
private void OnCollisionEnter(Collision collision)
{
if(collision.gameObject.layer == 7)
{
name = collision.gameObject.name;
if(name == "FrontBlock")
{
transform.Translate(Vector3.back * 0.2f);
}
if (name == "BackBlock")
{
transform.Translate(Vector3.forward * 0.2f);

}
if (name == "LeftBlock")
{

transform.Translate(Vector3.right * 0.2f);
}
if (name == "RightBlock")
{

transform.Translate(Vector3.left * 0.2f);
}
touched = true;
}
}
private void OnCollisionExit(Collision collision)
{
if(collision.gameObject.layer == 7)
{
touched = false;
}
}
}

И я использую альтернативу

Код: Выделить всё

    void FireCannon()
{
print(player.gameObject.transform.localRotation.eulerAngles);
Instantiate(CannonBall, FirePoint.transform.position, player.transform.position);
}
Объект игрока
Инспектор

Подробнее здесь: https://stackoverflow.com/questions/783 ... -correctly
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»