- Home /
Photon Player Controls Other Player
I am following Aiden is All Knowing's Multiplayer FPS tutorial and can't seem to solve this issue.
I have copied and pasted the exact code he use in the video (https://www.youtube.com/watch?v=kTzR3ypM_Qc).
When I launch the game everything works fine but when the second player joins problems arise. When one player moves the other moves instead of it and when one player shoots the other the player who fired the weapon receives the damage and the second player does not have the fps cam activated!!!
I have put the character prefab in the correct place btw. AND THERE IS NO ERRORS!
FPSWalker Script
using UnityEngine;
using System.Collections;
public class RigidbodyFPSWalker : MonoBehaviour {
public float speed = 10.0f;
public float gravity = 10.0f;
public float maxVelocityChange = 10.0f;
public bool canJump = true;
public float jumpHeight = 2.0f;
private bool grounded = false;
public GameObject me;
public int health = 100;
public GameObject fpsCam;
void Awake () {
GetComponent<Rigidbody>().freezeRotation = true;
GetComponent<Rigidbody>().useGravity = false;
}
void FixedUpdate () {
if (grounded) {
// Calculate how fast we should be moving
Vector3 targetVelocity = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
targetVelocity = transform.TransformDirection(targetVelocity);
targetVelocity *= speed;
// Apply a force that attempts to reach our target velocity
Vector3 velocity = GetComponent<Rigidbody>().velocity;
Vector3 velocityChange = (targetVelocity - velocity);
velocityChange.x = Mathf.Clamp(velocityChange.x, -maxVelocityChange, maxVelocityChange);
velocityChange.z = Mathf.Clamp(velocityChange.z, -maxVelocityChange, maxVelocityChange);
velocityChange.y = 0;
GetComponent<Rigidbody>().AddForce(velocityChange, ForceMode.VelocityChange);
// Jump
if (canJump && Input.GetButton("Jump")) {
GetComponent<Rigidbody>().velocity = new Vector3(velocity.x, CalculateJumpVerticalSpeed(), velocity.z);
}
}
// We apply gravity manually for more tuning control
GetComponent<Rigidbody>().AddForce(new Vector3 (0, -gravity * GetComponent<Rigidbody>().mass, 0));
grounded = false;
if (health <= 0) {
GetComponent<PhotonView>().RPC ("DIE", PhotonTargets.AllBuffered, null);
}
}
void OnCollisionStay () {
grounded = true;
}
float CalculateJumpVerticalSpeed () {
// From the jump height and gravity we deduce the upwards speed
// for the character to reach at the apex.
return Mathf.Sqrt(2 * jumpHeight * gravity);
}
void OnGUI(){
GUI.Box (new Rect (10, 10, 100, 30), "HP | " + health);
}
[PunRPC]
public void applyDamage(int dmg){
health = health - dmg;
Debug.Log ("hit!" + health);
}
[PunRPC]
public void DIE(){
PhotonNetwork.Destroy (me);
PhotonNetwork.Disconnect ();
Application.LoadLevel(0);
}
}
Weapon Script
using UnityEngine;
using System.Collections;
public class wepScript : MonoBehaviour {
public Camera fpsCam;
public GameObject hitPar;
public int damage = 30;
public int range = 10000;
public Animation am;
public AnimationClip shoot;
void Update(){
if (Input.GetMouseButton (0)) {
fireShot ();
}
}
public void fireShot(){
if (!am.IsPlaying (shoot.name)) {
am.CrossFade (shoot.name);
RaycastHit hit;
Ray ray = fpsCam.ScreenPointToRay (new Vector3 (Screen.width / 2, Screen.height / 2, 0));
if (Physics.Raycast (ray, out hit, range)) {
if (hit.transform.tag == "Player") {
hit.transform.GetComponent<PhotonView> ().RPC ("applyDamage", PhotonTargets.AllBuffered, damage);
}
GameObject particleClone;
particleClone = PhotonNetwork.Instantiate (hitPar.name, hit.point, Quaternion.LookRotation (hit.normal), 0) as GameObject;
Destroy (particleClone, 2);
Debug.Log (hit.transform.name);
}
}
}
}
screen-shot-2016-07-10-at-111649.png
(81.7 kB)
Comment