- Home /
I need this translated(Js to C#).
I am trying to learn how to do C# but I watched a tutorial how to do this script but he did it in Js, so I need it translated can anyone help! Thank you!
var spawnPoint : Transform ;
var speed : int;
var nextFire = 0.0f;
var fireRate = 0.1f;
var ammo = 150;
var ammoText : GUIText;
var shotSound : AudioSource;
var wood : Transform;
var sand : Transform;
var dirt : Transform;
var water : Transform;
var enemy : Transform;
var range = 100;
// Update is called once per frame
function Update () {
if(Input.GetKey(KeyCode.Mouse0) && Time.time > nextFire)
{
if(ammo > 0)
{
Shot();
audio.Play();
ammo --;
}
}
}
function Shot()
{
nextFire = Time.time + fireRate;
var hit : RaycastHit;
var fwd = spawnPoint.TransformDirection(Vector3.forward);
Debug.DrawRay(spawnPoint.position, fwd);
if(Physics.Raycast(spawnPoint.position, fwd, hit, range))
{
if(hit.collider.tag == "Dirt")
{
Instantiate(dirt, hit.point, Quaternion.FromToRotation(Vector3.forward, hit.normal));
}
if(hit.collider.tag == "Sand")
{
Instantiate(sand, hit.point, Quaternion.FromToRotation(Vector3.forward, hit.normal));
}
if(hit.collider.tag == "Wood")
{
Instantiate(wood, hit.point, Quaternion.FromToRotation(Vector3.forward, hit.normal));
}
if(hit.collider.tag == "Water")
{
Instantiate(water, hit.point, Quaternion.identity);
}
if(hit.collider.tag == "Enemy")
{
Instantiate(enemy, hit.point, Quaternion.FromToRotation(Vector3.forward, hit.normal));
}
}
}
function OnGUI()
{
ammoText.text = "Ammo: " + ammo.ToString();
}
Answer by DynamicPrgm · Jan 22, 2014 at 10:37 PM
I will do it and explain, but first I ask, why do you need this translated if you don't know C#? Heres how to translate:
In C#, you have to include the files you use, which would be the UnityEngine and the basic System.Collections:
using UnityEngine;
using System.Collections
In UnityScript, the code is contained within a class behind the scenes, without you actually having to define the class, and in the class must be the name of the file. (at least, in Unity.):
public class NameOfScript : MonoBehaviour {
}
Variables in C# are statically typed, meaning you have to declare the variable using the type in place of the js var, for example:
int example;
string helloWorld = "SUP world";
Functions in C# are stated with a return type (when you return
, what type it is, int, float, etc.) when no return type is needed, use void
:
void Update() {
//stuff
}
Like js, C# is the same with the adding, subtracting, etc.
//javascript AND C# the same
a = a+b;
b--;
b *= 11;
a = ((b*a) + a*a*a);
Using all of what I typed, your code is this:
using UnityEngine;
using System.Collections
public class NameOfScript : MonoBehaviour {
Transform spawnPoint;
int speed;
float nextFire = 0.0f;
float fireRate = 0.1f;
int ammo = 150;
GUIText ammoText;
AudioSource shotSound;
Transform wood;
Transform sand;
Transform dirt;
Transform water;
Transform enemy;
int range = 100;
// Update is called once per frame
function Update () {
if(Input.GetKey(KeyCode.Mouse0) && Time.time > nextFire) {
if(ammo > 0) {
Shot();
audio.Play();
ammo --;
}
}
}
void Shot() {
nextFire = Time.time + fireRate;
RaycastHit hit;
Vector3 fwd = spawnPoint.TransformDirection(Vector3.forward);
Debug.DrawRay(spawnPoint.position, fwd);
if(Physics.Raycast(spawnPoint.position, fwd, out hit, range)) {
if(hit.collider.tag == "Dirt") {
Instantiate(dirt, hit.point, Quaternion.FromToRotation(Vector3.forward, hit.normal));
}
if(hit.collider.tag == "Sand") {
Instantiate(sand, hit.point, Quaternion.FromToRotation(Vector3.forward, hit.normal));
}
if(hit.collider.tag == "Wood") {
Instantiate(wood, hit.point, Quaternion.FromToRotation(Vector3.forward, hit.normal));
}
if(hit.collider.tag == "Water") {
Instantiate(water, hit.point, Quaternion.identity);
}
if(hit.collider.tag == "Enemy") {
Instantiate(enemy, hit.point, Quaternion.FromToRotation(Vector3.forward, hit.normal));
}
}
}
void OnGUI() {
ammoText.text = "Ammo: " + ammo.ToString();
}
}
Thank you for doing this. And it's not that I don't know how to write C# scripts because I have written many C# scripts, it's just that I didn't know hoe to do any of the raycasting which was also the biggest part of the script, because I've never done raycast before. But thank you for helping.