- Home /
Question by
vipvex · Jan 19, 2013 at 05:05 AM ·
collisionmultiplayerprojectiledouble
Multiplayer projectile problems!
I'm working on a game were you shoot projectiles. I have a simple script that makes a object move forward and if it collides with a player it sends an RPC call that makes him take damage. However when I shoot the projectile it deals 2 that damage. I know what causes this bug however I can't seem to figure out a solution. The bug is that when the projectile is created in everyone's game and when it travels forward and collides with a player every one sends a RCP call that says take damage. So if there are 5 people of the server the player will take 5 times the damage. Here is the code:
var damadge : int;
var damadgeOverTime : int;
var damadgeOverTimeTime : int;
var speed : float = 50;
var size : Vector3;
var gravity : float = 1;
var gravity2 : AnimationCurve = AnimationCurve(Keyframe(0, 0), Keyframe(5, .5), Keyframe(10, 1));
var aoe : boolean = false;
var aoeDamadge : float;
var aoeRadius : float;
@HideInInspector
var keepMoving : boolean = true;
@HideInInspector
var time : float;
@HideInInspector
var screenPos : Vector3;
@HideInInspector
var hit : boolean = false;
@HideInInspector
var guiDamadgeSpeed : float;
function Awake () {
time = Time.time;
}
function Start () {
Physics.IgnoreLayerCollision(0, 8);
transform.localScale = size;
}
function Update (){
}
function FixedUpdate (){
if (keepMoving){
rigidbody.MovePosition(rigidbody.position + (Vector3.Scale(transform.forward, Vector3(speed, speed ,speed)) * Time.deltaTime));
rigidbody.position.y -= gravity2.Evaluate(Time.time - time) * gravity * Time.deltaTime;
}
}
function OnCollisionEnter(collision : Collision) {
if (collision.gameObject.tag == "Player"){
var playerScript = collision.gameObject.GetComponent(Player);
playerScript.networkView.RPC("TakeDamadge", RPCMode.All, damadge);
Debug.Log("Hit player for" + damadge);
}
if (onHitEffect){
var contact : ContactPoint = collision.contacts[0];
var rot = Quaternion.FromToRotation(Vector3.forward, contact.normal);
Instantiate(onHitEffect, contact.point, rot);
}
Destroy (gameObject);
}
Comment