- Home /
Have X & Z movement working in a space RTS...how about Y?
Hi all, fairly new to unity still figuring things out, have a lot to learn on the programming side.
Anyway what im trying to do is something similar to the old Homeworld games, but with waypoints. Ie you have a main mother ship click on it to select it, click where you want to move it in terms of X & Z axis then once you have clicked be able to set the Z value and then have the ship accelerate and then decelerate to that position.
Now the following script i found from the Unity Community wiki it is as follows.
/*
* Esse Script movimenta o GameObject quando você clica ou
* mantém o botão esquerdo do mouse apertado.
*
* Para usá-lo, adicione esse script ao gameObject que você quer mover
* seja o Player ou outro
*
* Autor: Vinicius Rezendrix - Brasil
* Data: 11/08/2012
*
* This script moves the GameObeject when you
* click or click and hold the LeftMouseButton
*
* Simply attach it to the gameObject you wanna move (player or not)
*
* Autor: Vinicius Rezendrix - Brazil
* Data: 11/08/2012
*
*/
using UnityEngine;
using System.Collections;
public class moveOnMouseClick : MonoBehaviour {
private Transform myTransform; // this transform
private Vector3 destinationPosition; // The destination Point
private float destinationDistance; // The distance between myTransform and destinationPosition
public float moveSpeed; // The Speed the character will move
void Start () {
myTransform = transform; // sets myTransform to this GameObject.transform
destinationPosition = myTransform.position; // prevents myTransform reset
}
void Update () {
// keep track of the distance between this gameObject and destinationPosition
destinationDistance = Vector3.Distance(destinationPosition, myTransform.position);
if(destinationDistance < .5f){ // To prevent shakin behavior when near destination
moveSpeed = 0;
}
else if(destinationDistance > .5f){ // To Reset Speed to default
moveSpeed = 3;
}
// Moves the Player if the Left Mouse Button was clicked
if (Input.GetMouseButtonDown(0)&& GUIUtility.hotControl ==0) {
Plane playerPlane = new Plane(Vector3.up, myTransform.position);
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
float hitdist = 0.0f;
if (playerPlane.Raycast(ray, out hitdist)) {
Vector3 targetPoint = ray.GetPoint(hitdist);
destinationPosition = ray.GetPoint(hitdist);
Quaternion targetRotation = Quaternion.LookRotation(targetPoint - transform.position);
myTransform.rotation = targetRotation;
}
}
// Moves the player if the mouse button is hold down
else if (Input.GetMouseButton(0)&& GUIUtility.hotControl ==0) {
Plane playerPlane = new Plane(Vector3.up, myTransform.position);
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
float hitdist = 0.0f;
if (playerPlane.Raycast(ray, out hitdist)) {
Vector3 targetPoint = ray.GetPoint(hitdist);
destinationPosition = ray.GetPoint(hitdist);
Quaternion targetRotation = Quaternion.LookRotation(targetPoint - transform.position);
myTransform.rotation = targetRotation;
}
// myTransform.position = Vector3.MoveTowards(myTransform.position, destinationPosition, moveSpeed * Time.deltaTime);
}
// To prevent code from running if not needed
if(destinationDistance > .5f){
myTransform.position = Vector3.MoveTowards(myTransform.position, destinationPosition, moveSpeed * Time.deltaTime);
}
}
}
Now this works great for moving in the X & Z... and i think i roughly understand what its doing... (one issue is it rotates really quickly so i need to put something in for that, plus acceleration and deceleration.)
So my idea for adding what i need is to somehow turn the first ray check into just a pause of some sort and it gets the value of the x and z position, then create another plane from that position aligned to the y axis then you can move the mouse up and down and get the y value and move to that position in space...right?
So am i on the right track and any idea where i would start to do this?
Your answer
Follow this Question
Related Questions
The name 'Joystick' does not denote a valid type ('not found') 2 Answers
Continuously rotate a gameobject on 1 axis perpendicularly to another gameobject's normal? 1 Answer
Get the position of the first finger that touched the collider? 1 Answer
Object Movement via Mouse Click? 3 Answers
Changing the landing and switch directions of standard assets TPC controller 0 Answers