I have a cannon in my Player gameobject, I have a PlayerController.cs file in my Player object, the content is below. In addition, I have a Cannonball for my cannon object to throw. But when I use Instantiate prefab, I want spawned Item gonna use my player’s rotation, but it doesn’t, can you help me?
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;
}
}
}
And I’m used for alternativly
void FireCannon()
{
print(player.gameObject.transform.localRotation.eulerAngles);
Instantiate(CannonBall, FirePoint.transform.position, player.transform.position);
}
Player Object
Inspector
New contributor
BF Bulut is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.