- Home /
Help!!! Transform controls problem for a plan-view air hockey game.
Okay so I've hit a wall while trying to code a controls for a plan view air hockey game. I have the main camera facing down with the full "table" and what I want to happen is for p1(the puck smacker) to be able to transform forward and back with (W and S) (which I have working) and to "Strafe" left and right with (A and D). I had this code at first:
private var walkSpeed : float = 1.0;
private var gravity = 100.0;
private var moveDirection : Vector3 = Vector3.zero;
private var charController : CharacterController;
//references the character controller private var strength = 40.0;
function Start(){
charController = GetComponent(CharacterController);
}
function Update () {
if(charController.isGrounded == true)
{
if(Input.GetAxis("VerticalP1") > .1)
{
walkSpeed = .5;
}
if(Input.GetAxis("VerticalP1") < -.1)
{
walkSpeed = .5;
}
transform.eulerAngles.y += Input.GetAxis("Horizontal");
moveDirection = Vector3(0,0, Input.GetAxis("Vertical"));
moveDirection = transform.TransformDirection(moveDirection);
}
moveDirection.y -= gravity * Time.deltaTime;
charController.Move(moveDirection*walkSpeed);
}
function OnControllerColliderHit (hit : ControllerColliderHit)
{
var body : Rigidbody = hit.collider.attachedRigidbody;
if(body){
var pushDir = Vector3 (hit.moveDirection.x, 0, hit.moveDirection.z);
body.velocity = pushDir*strength*.35;
}
}
(Which when I hit the (A and D) made the player pivot rather than strafe. Then I tried editing the code to this:
private var walkSpeed : float = 1.0;
private var gravity = 100.0;
private var moveDirection : Vector3 = Vector3.zero;
private var charController : CharacterController;
//references the character controller private var strength = 40.0;
function Start(){
charController = GetComponent(CharacterController);
}
function Update () {
if(charController.isGrounded == true)
{
if(Input.GetAxis("VerticalP1") > .1)
{
walkSpeed = .5;
}
if(Input.GetAxis("VerticalP1") < -.1)
{
walkSpeed = .5;
}
if(Input.GetAxis("HorizontalP1") > .1)
{
transform.TransformDirection( Vector3(1, 0, 0 ) );
walkSpeed = .5;
}
if(Input.GetAxis("HorizontalP1") < -.1)
{
transform.TransformDirection( Vector3(-1, 0, 0 ) );
walkSpeed = .5;
}
moveDirection = Vector3(0,0, Input.GetAxis("VerticalP1"));
moveDirection = transform.TransformDirection(moveDirection);
}
moveDirection.y -= gravity * Time.deltaTime;
charController.Move(moveDirection*walkSpeed);
}
function OnControllerColliderHit (hit : ControllerColliderHit)
{
var body : Rigidbody = hit.collider.attachedRigidbody;
if(body){
var pushDir = Vector3 (hit.moveDirection.x, 0, hit.moveDirection.z);
body.velocity = pushDir*strength*.35;
}
}
To no avail, : ( I've assigned the inputs on the unity axis/axes fine and everything, it just refuses to work. Any help will be greatly appreciated. Thanks!!!
Your answer
Follow this Question
Related Questions
Unwanted gameObject movement after jumping. 1 Answer
How to use x axis for transform.LookAt 3 Answers
How to keep going forward while jumping ? 1 Answer
Controller Support. Left Axis. How to code in C#? 1 Answer
How do you get the vector3 of one object and assign that vector3 to another object? 1 Answer