- Home /
How would i convert this from JS into C#?
pretty simple code but i have no idea how to make a c# version. i tried making vector 3s for everything but that seemed way too inefficient.
var screenBoundary: float;
if(transform.position.x < -screenBoundary)
transform.position.x = -screenBoundary;
(transform.position.x > screenBoundary)
transform.position.x = screenBoundary;
Answer by Garrafote · Sep 07, 2013 at 03:37 AM
Simple
float screenBoundary;
// you need to store position on a local variable
var position = transform.position;
// then you can modify its fields
if(position.x < - screenBoundary)
position.x = -screenBoundary;
if(position.x > screenBoundary)
position.x = screenBoundary;
// and then deploy to the original variable
transform.position = position;
Fun fact:
your last code would actually work, but you was missing some .x and parentheses
if ((transform.position = new Vector3(transform.position.x, transform.position.y, transform.position.z)).x < -screenBoundary)
{
transform.position = new Vector3(-screenBoundary, transform.position.y, transform.position.z);
}
if ((transform.position = new Vector3(transform.position.x, transform.position.y, transform.position.z)).x > screenBoundary)
{
transform.position = new Vector3(screenBoundary, transform.position.y, transform.position.z);
}
anyway those attributions inside the if conditions aren't necessaries so you can simplify your code to look like this:
if (transform.position.x < -screenBoundary)
{
transform.position = new Vector3(-screenBoundary, transform.position.y, transform.position.z);
}
if (transform.position.x > screenBoundary)
{
transform.position = new Vector3(screenBoundary, transform.position.y, transform.position.z);
}
this works. thanks! i assumed i was completely off for some reason.
You could condense this a bit further by replacing the if statements with an inline set of conditional operators:
transform.position = (transform.position.x < -screenBoundary)? (new Vector3(-screenBoundary, transform.position.y, transform.position.z)) : ((transform.position.x > screenBoundary)? (new Vector3(screenBoundary, transform.position.y, transform.position.z)) : transform.position);
The statement won't modify transform.position if neither condition returns true.
Answer by flaviusxvii · Sep 06, 2013 at 10:03 PM
Easy one!
float screenBoundary;
if(transform.position.x < -screenBoundary)
transform.position.x = -screenBoundary;
(transform.position.x > screenBoundary)
transform.position.x = screenBoundary;
im pretty sure that wont work, you cant modify the x y or z of the position directly, you will need to store it in a variable like this :
transform.position = new Vector3(screenboundary,transform.position.y,transform.position.z);
OR
transform.position += new Vector3(screenBoundary,0,0);
heres my code, its not working for some reason
if(transform.position = new Vector3(transform.position.x, transform.position.y, transform.position.z) < -screenBoundary)
{
transform.position = new Vector3(-screenBoundary, transform.position.y, transform.position.z);
}
if(transform.position = new Vector3(transform.position.x, transform.position.y, transform.position.z) > screenBoundary)
{
transform.position = new Vector3(screenBoundary, transform.position.y, transform.position.z);
}
i get an error "Operator < cannot be applied to operands of type UnityEngine.Vector3 and float"
You can't compare a Vector3 and float. You need to get the floats within Vector3 and then compare.
transform.position.x > screenBoundary;
i gave up and decided to just use a clamp in order to keep the player (who in this case is a ship in a 2D vertical shooter) from moving off screen. probably not the most efficient method but w/e.
Your answer
Follow this Question
Related Questions
Create a guitexture When clicked on 3d text? 0 Answers
js to C# converstion Problem 3 Answers
.js to C# conversion 4 Answers
Convert js to C# Serializer problem 1 Answer
Gameobject variable on C# 1 Answer