So this is about the 5th time I asked this question, just hoping that someone can help me out through this frustrating process. I want to ignore the collisions between my “spell” layer game objects, and my “LocalPlayer” capsule collider, so the player’s own spells do not damage the player. I believe I setup the layers correctly in my PlayerController script, but I have tried so many things to try to ignore these layer collisions. I went to the physics chart and unchecked the collision box between the two layers as well as adding phyics.ignorelayermaskcollision which only worked on the lan host side, while the client could still shoot itself and not shoot the lan host. My hit detection script is assigned to a game object that is spawned on the server. Any help is appreciated thanks!
//Player Controller
using System.Collections;
using System.Collections.Generic;
using UnityEngine.Networking;
using UnityEngine.UI;
using UnityEngine;
[RequireComponent(typeof(PlayerMotor))]
public class PlayerController : NetworkBehaviour {
public AudioListener listener;
[SerializeField]
[SyncVar]
public float speed = 5f;
[SerializeField]
private float lookSensitivity = 3f;
[SerializeField]
Behaviour[] disableComponents;
[SerializeField]
private PlayerMotor motor;
private Health health;
public Camera cam;
public Image healthBar;
void Start () {
if (!isLocalPlayer) {
AssignRemoteLayer ();
ComponentsToDisable ();
}
RegisterPlayer ();
}
void Update () {
if (!isLocalPlayer) {
return;
}
MovePlayer ();
playerUI ();
}
void ComponentsToDisable() {
for (int i = 0; i < disableComponents.Length; i++) {
disableComponents *.enabled = false;*
-
}*
-
}*
-
void AssignRemoteLayer () {*
-
gameObject.layer = LayerMask.NameToLayer ("RemotePlayer");*
-
foreach (Transform t in transform) {*
-
t.gameObject.layer = LayerMask.NameToLayer ("RemotePlayer");*
-
}*
-
}*
-
void RegisterPlayer () {*
-
motor = GetComponent<PlayerMotor> ();*
-
string ID = "Player " + GetComponent<NetworkIdentity> ().netId;*
-
transform.name = ID;*
-
}*
-
void MovePlayer () {*
-
//all of this is for moving the character*
-
float xMove = Input.GetAxis ("Horizontal");*
-
float zMove = Input.GetAxis ("Vertical");*
-
float yMove = Input.GetAxis ("Jump");*
_ Vector3 moveHorizontal = transform.right * xMove;_
_ Vector3 moveVertical = transform.forward * zMove;_
_ Vector3 jump = transform.up * yMove;_
_ Vector3 velocity = (moveHorizontal + moveVertical + jump).normalized * speed;_
-
//used to move the character*
-
motor.Move (velocity);*
-
//this is for only turning the character*
-
float yRot = Input.GetAxisRaw ("Mouse X");*
_ Vector3 rotation = new Vector3 (0f, yRot, 0f) * lookSensitivity;_
-
motor.Rotate (rotation);*
-
float xRot = Input.GetAxisRaw ("Mouse Y");*
_ float cameraRotation = xRot * lookSensitivity;_
-
motor.RotateCamera (cameraRotation);*
-
}*
-
void playerUI() {*
-
health = GetComponent<Health> ();*
-
healthBar.fillAmount = (health.currentHealth/100f);*
-
}*
-
public void temporarySlow () {*
-
StartCoroutine (slowMovement ());*
-
}*
-
IEnumerator slowMovement () {*
-
speed = 0f;*
-
yield return new WaitForSeconds (3f);*
-
speed = 5f;*
-
}*
}
//hit detection
using System.Collections;
using System.Collections.Generic;
using UnityEngine.Networking;
using UnityEngine;
public class hitDetection : NetworkBehaviour { -
public int damage;*
-
// Use this for initialization*
-
void Start () {*
-
}*
-
// Update is called once per frame*
-
void Update () {*
-
}*
-
void OnTriggerEnter (Collider col) {*
-
var hit = col.gameObject;*
-
var health = hit.GetComponent<Health> ();*
-
if (health != null) {*
-
health.TakeDamage (damage);*
-
}*
-
}*
-
}*