- Home /
Duplicate Question
[Android]How to move an object and have it snap to grid?
Right now I have a script that moves the object I touch to where ever I move my finger. How would I get it to snap to a grid? Here is my script:
#pragma strict
var squareSize : float;
function Start () {
}
function Update () {
if(Input.touchCount > 0)
{
var hit : RaycastHit;
var vektor = Vector3(Input.GetTouch(0).position.x,Input.GetTouch(0).position.y,0f);
var ray : Ray = Camera.main.ScreenPointToRay (vektor);
var coor = Vector3(vektor.x, vektor.y, 5f);
var pos = Camera.main.ScreenToWorldPoint(coor);
if (Physics.Raycast(ray, hit, Mathf.Infinity)) {
hit.transform.position.x = pos.x;
hit.transform.position.y = pos.y;
}
}
}
Any advice? Thanks in advanced.
You could store the grid positions in a 2D array and then check in update if the object is within a certain distance from the center of those positions.
Or
you could build a grid of box colliders and OnTriggerEnter, snap it to the center.
Answer by Cherno · Mar 19, 2014 at 12:40 AM
It's easy, you just find the nearest whole grid position to your raycast hit point by using Mathf.RoundToInt.
If the grid is in increments of 1:
var touchedCoordsX : int = Mathf.RoundToInt(hit.point.x);
var touchedCoordsY : int = Mathf.RoundToInt(hit.point.y);
var touchedCoordsZ : int = Mathf.RoundToInt(hit.point.z);
var gridCoords = Vector3(touchedCoordsX , touchedCoordsY , touchedCoordsZ );
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
TPS Camera with Joystick (Android) 0 Answers
Can someone help me fix my Javascript for Flickering Light? 6 Answers
Setting Scroll View Width GUILayout 1 Answer
BCE0049 error with network script 0 Answers