After I instantiate particle system my game starts to lag,duplicate objects,camera stops rotating on X axis,every time I press space it plays sound,teleports me and console is filled with messages like “There are 64 audio listeners”
Here is the code:
`using Photon.Pun;
using Photon.Realtime;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Hashtable = ExitGames.Client.Photon.Hashtable;
public class PlayerController : MonoBehaviourPunCallbacks, IDamagable
{
[SerializeField] GameObject CameraHolder;
[SerializeField] GameObject ui;
[SerializeField] Image healthBarImage;
ParticleSystem particle;
public Transform jumpPos;
PlayerManager playerManager;
AudioSource audioSource;
[SerializeField] float mouseSensitivity, sprintSpeed, walkSpeed, jumpForce, smoothTime;
[SerializeField] Item[] items;
Rigidbody rb;
int itemIndex;
int previousitemIndex = -1;
const float maxHealth = 100;
float currentHealth = maxHealth;
PhotonView Pv;
float VerticalLookRotation;
bool Grounded;
Vector3 smoothMoveVelocity;
Vector3 moveAmount;
void Awake()
{
audioSource = GetComponent<AudioSource>();
Cursor.lockState = CursorLockMode.Locked;
rb = GetComponent<Rigidbody>();
Pv = GetComponent<PhotonView>();
playerManager = PhotonView.Find((int)Pv.InstantiationData[0]).GetComponent<PlayerManager>();
particle = GetComponent<ParticleSystem>();
}
void Start()
{
if(Pv.IsMine)
{
EquipItem(0);
}
else
{
Destroy(GetComponentInChildren<Camera>().gameObject);
Destroy(rb);
Destroy(ui);
}
}
void Update()
{
if (!Pv.IsMine)
return;
Look();
jump();
if(transform.position.y <= -150)
{
playerManager.Die();
}
for (int i = 0; i < items.Length; i++)
{
if(Input.GetKeyDown((i +1).ToString()))
{
EquipItem(i);
break;
}
}
if(Input.GetMouseButtonDown(0))
{
items[itemIndex].Use();
}
if(Input.GetKey(KeyCode.LeftControl))
{
walkSpeed = 2.5f;
sprintSpeed = 2.5f;
jumpForce = 100;
transform.localScale = new Vector3(transform.localScale.x, 0.6f, transform.localScale.z);
}
if (Input.GetKeyUp(KeyCode.LeftControl))
{
transform.localScale = new Vector3(transform.localScale.x, 1.262167f, transform.localScale.z);
walkSpeed = 5;
sprintSpeed = 9.55f;
jumpForce = 500;
}
}
void Look()
{
transform.Rotate(Vector3.up * Input.GetAxisRaw("Mouse X") * mouseSensitivity);
VerticalLookRotation += Input.GetAxisRaw("Mouse Y") * mouseSensitivity;
VerticalLookRotation = Mathf.Clamp(VerticalLookRotation, -90f, 90f);
CameraHolder.transform.localEulerAngles = Vector3.left * VerticalLookRotation;
}
public void SetGroundedState(bool _Grounded)
{
Grounded = _Grounded;
}
void Move()
{
Vector3 moveDir = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical")).normalized;
moveAmount = Vector3.SmoothDamp(moveAmount, moveDir * (Input.GetKey(KeyCode.LeftShift) ? sprintSpeed : walkSpeed), ref smoothMoveVelocity, smoothTime);
}
void jump()
{
if (Input.GetKeyDown(KeyCode.Space) && Grounded)
{
ParticleSystem particleINS = Instantiate(particle, jumpPos);
rb.AddForce(transform.up * jumpForce);
}
}
void EquipItem(int _index)
{
if (_index == previousitemIndex)
return;
itemIndex = _index;
items[itemIndex].itemGameObject.SetActive(true);
if(previousitemIndex != -1)
{
items[previousitemIndex].itemGameObject.SetActive(false);
}
previousitemIndex = itemIndex;
if(Pv.IsMine)
{
Hashtable hash = new Hashtable();
hash.Add("itemIndex", itemIndex);
PhotonNetwork.LocalPlayer.SetCustomProperties(hash);
}
}
public override void OnPlayerPropertiesUpdate(Player targetPlayer, Hashtable changedProps)
{
if(!Pv.IsMine && targetPlayer == Pv.Owner)
{
EquipItem((int)changedProps["itemIndex"]);
}
}
private void FixedUpdate()
{
if (!Pv.IsMine)
return;
Move();
rb.MovePosition(rb.position + transform.TransformDirection(moveAmount) * Time.fixedDeltaTime);
}
public void TakeDamage(float damage)
{
Pv.RPC("RPC_TakeDamage", RpcTarget.All, damage);
audioSource.Play();
}
[PunRPC]
void RPC_TakeDamage(float damage)
{
if (!Pv.IsMine)
return;
Debug.Log("took damage" + damage);
currentHealth -= damage;
healthBarImage.fillAmount = currentHealth / maxHealth;
if(currentHealth <= 0 )
{
Die();
}
}
void Die()
{
playerManager.Die();
}
private void OnCollisionEnter(Collision collision)
{
if(collision.gameObject.tag == "Bouncepad")
{
rb.AddForce(transform.up * 1100);
}
}
}
`