- Home /
Weird behavior when adding rotation.
I'm trying to make a "bumerang" like projectile that you can shoot. In my script the projectile is supposed to rotate to the left or to the right depending on a witch way you swiped you mouse cursor however sometimes when I change the direction I look at and swipe to the right the projectile goes the complete opposite direction. Could anybody tell me how i could fix this bug? Thanks! `
pragma strict
var onHitEffect : GameObject;
var damadge : int; var damadgeOverTime : int; var damadgeOverTimeTime : int;
var speed : float = 50; var size : Vector3; var directionDistance : float = 50; var directionCurve : AnimationCurve; var directionStrength : Vector2 = Vector2(2, 0); var directionStrengthMulti : float;
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;
directionCurve = AnimationCurve(Keyframe(0, 0), Keyframe(.5, 1));
}
function Start () {
Physics.IgnoreLayerCollision(0, 8);
transform.localScale = size;
}
function Update (){
//directionCurve = AnimationCurve(Keyframe(0, 0), Keyframe(1, 1));
}
function FixedUpdate (){
if (keepMoving){
var xPos = Vector3(0, directionCurve.Evaluate(Time.time - time) * (directionStrength.y * directionStrengthMulti) * Time.deltaTime, 0);
rigidbody.MovePosition(rigidbody.position + (Vector3.Scale(transform.forward, Vector3(speed, speed, speed)) * Time.deltaTime));
transform.localRotation.eulerAngles -= xPos;
//Debug.Log(transform.localRotation.eulerAngles.y);
//var xPos = Vector3.Scale(transform.right, Vector3(0, directionCurve.Evaluate(Time.time - time) * (directionStrength.y * directionStrengthMulti) * Time.deltaTime, 0));
//rigidbody.MovePosition(rigidbody.position + (Vector3.Scale(transform.right, xPos)));
//rigidbody.MovePosition(rigidbody.position + (Vector3.Scale(transform.up,
//Vector3(0, directionCurve.Evaluate(Time.time - time) * (directionStrength.y * directionStrengthMulti) * Time.deltaTime, 0))));
//rigidbody.position += xPos;
//rigidbody.position.y += directionCurve.Evaluate(Time.time - time) * directionStrength * Time.deltaTime;
}
}
function OnCollisionEnter(collision : Collision) {
if (collision.gameObject.tag == "Player"){
var playerScript = collision.gameObject.GetComponent(Player);
//playerScript.networkView.RPC("TakeDamadge", RPCMode.All, damadge);
}
if (onHitEffect){
var contact : ContactPoint = collision.contacts[0];
var rot = Quaternion.FromToRotation(Vector3.forward, contact.normal);
Instantiate(onHitEffect, contact.point, rot);
}
Destroy (gameObject);
}
That would be a lot more readable if you used the code button to format the code.
it's a boomerang (greetings from Australia!). As per Eric, please format your code. You can do this by highlighting all your code, then clicking the 10101 button at the top of the edit window.
Though, it may be easier just to delete the code, paste it in again from the source, then highlight all the code and press the 101010 button at the top of the edit window before posting. When you don't mark your code as code, the text gets html escaped and it gets really hard to reformat it.
Is it possible that this line:
var rot = Quaternion.FromToRotation(Vector3.forward, contact.normal);
Is flipping the "bumerang" upside down on some hits so it appears to rotate backwards?
Issues with directionStrength$$anonymous$$ulti and/or directionStrength would be the next thing you might look at (I don't see the code here that changes these values).
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Object Rotation/Character Speed 1 Answer
Object problem 1 Answer
I need a 3d polygon between two cylinders 1 Answer
Slicing Objects 1 Answer