Question by
Shadowlash1221 · Jan 20, 2016 at 12:56 AM ·
2dscripting problemprojectile
2D Projectile Script Not Working
Hello There!
So my player has a projectile he throws, but he only throws it right, what i mean by that is when he faces right he throws it right, but when he faces left the projectile try's to go right. I want him to throw the projectile left when he faces left and when he faces right throw it right. Please help!
using UnityEngine;
using System.Collections;
public class StarProjectile : MonoBehaviour {
public Rigidbody2D projectile;
void Update() {
if (Input.GetButtonDown("Fire1")) {
Rigidbody2D clone;
clone = Instantiate(projectile, transform.position, transform.rotation) as Rigidbody2D;
clone.velocity = transform.TransformDirection(Vector3.left * 50);
}
}
}
using UnityEngine;
using System.Collections;
public class SimplePlatformController : MonoBehaviour {
[HideInInspector] public bool facingRight = true;
[HideInInspector] public bool jump = false;
public float moveForce = 365f;
public float maxSpeed = 5f;
public float jumpForce = 1000f;
public Transform groundCheck;
private bool grounded = false;
private Animator anim;
private Rigidbody2D rb2d;
// Use this for initialization
void Awake ()
{
anim = GetComponent<Animator>();
rb2d = GetComponent<Rigidbody2D>();
rb2d.freezeRotation = true;
}
// Update is called once per frame
void Update ()
{
grounded = Physics2D.Linecast(transform.position, groundCheck.position, 1 << LayerMask.NameToLayer("Ground"));
if (Input.GetButtonDown("Jump") && grounded)
{
jump = true;
}
}
void FixedUpdate()
{
float h = Input.GetAxis("Horizontal");
anim.SetFloat("Speed", Mathf.Abs(h));
if (h * rb2d.velocity.x < maxSpeed)
rb2d.AddForce(Vector2.right * h * moveForce);
if (Mathf.Abs (rb2d.velocity.x) > maxSpeed)
rb2d.velocity = new Vector2(Mathf.Sign (rb2d.velocity.x) * maxSpeed, rb2d.velocity.y);
if (h > 0 && !facingRight)
Flip ();
else if (h < 0 && facingRight)
Flip ();
if (jump)
{
anim.SetTrigger("Jump");
rb2d.AddForce(new Vector2(0f, jumpForce));
jump = false;
}
}
void Flip()
{
facingRight = !facingRight;
Vector3 theScale = transform.localScale;
theScale.x *= -1;
transform.localScale = theScale;
}
}
Comment
Best Answer
Answer by incorrect · Jan 20, 2016 at 12:58 AM
void Update()
{
if (Input.GetButtonDown("Fire1"))
{
Rigidbody2D clone;
clone = Instantiate(projectile, transform.position, transform.rotation) as Rigidbody2D;
if(facingRight)
clone.velocity = transform.TransformVector(50 * Vector3.right);
else
clone.velocity = transform.TransformVector(-50 * Vector3.right);
}
}
The name `facingRight' does not exist in the current context error
It's in your SimplePlatformController script. I suggest you to replace Update() of your controller with Update() I provided you.
Fixed it! Thanks for your help!
using UnityEngine;
using System.Collections;
public class StarProjectile : $$anonymous$$onoBehaviour {
[HideInInspector] public bool facingRight = true;
public Rigidbody2D projectile;
void Update()
{
if (Input.GetButtonDown("Fire1"))
{
Rigidbody2D clone;
clone = Instantiate(projectile, transform.position, transform.rotation) as Rigidbody2D;
if(facingRight)
clone.velocity = transform.TransformVector(50 * Vector3.right);
else
clone.velocity = transform.TransformVector(-50 * Vector3.right);
}
}
}