Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
-3
Question by Rafael · Dec 01, 2010 at 05:36 PM · fun

Can someone convert this C# script to javascript

using UnityEngine; using System.Collections;

// Orb controller (position and fire) public class OrbController : MonoBehaviour { public Transform turret; public Transform muzzleFlash; public Transform fireTrail; public GameObject player;

// How fast the turret can turn and aim towards the player public float aimSpeed = 50;

public AudioClip fireSound; public AudioClip foldoutSound; public AudioClip foldinSound;

// Variable to be animated public float flyLerp = 0;

// Is the turret folded out? private bool unfolded = false; public bool IsUnfolded () { return unfolded; }

// Position A and B and how to fly between them private Vector3 oldFlyTarget = Vector3.zero; private Vector3 flyTarget = Vector3.zero;

private bool gotBehindYet = false; private LayerMask mask; private AudioSource gunAudioSource;

private int hitsThisRound = 0;

private Vector3 aimTarget { get { return player.transform.position + new Vector3(0, 1.4f, 0); } }

// Use this for initialization void Start () { // Add orb's own layer to mask mask = 1 << gameObject.layer; // Add Igbore Raycast layer to mask mask |= 1 << LayerMask.NameToLayer("Ignore Raycast"); // Invert mask mask = ~mask;

 flyTarget = transform.position;
 oldFlyTarget = flyTarget;
 animation["FightSequence"].layer = -1;
 animation.Play("FightSequence");

 //muzzleFlash.enabled = false;
 muzzleFlash.gameObject.SetActiveRecursively(false);

 gunAudioSource = audio;

}

void FixedUpdate () { if (Time.deltaTime == 0 || Time.timeScale == 0) return;

 // Variables for positional and rotational stabilization
 float prediction = 0.35f;
 float force = 300.0f;
 float torque = 100.0f;

 // Move orb target position from old position to new
 Vector3 position = oldFlyTarget * (1-flyLerp) + flyTarget * flyLerp;
 // Add slight up and down motion
 position += Mathf.Sin(Time.time * 2) * Vector3.up * 0.05f;

 // Add force to control position
 Vector3 forceVector = (position - (transform.position + rigidbody.velocity * prediction ));
 rigidbody.AddForce(forceVector * force);
 Debug.DrawLine(position, transform.position);

 // Calculate what the transform.up direction will be in a little while,
 // given the current angular velocity
 Vector3 predictedUp = Quaternion.AngleAxis(
     rigidbody.angularVelocity.magnitude * Mathf.Rad2Deg * prediction,
     rigidbody.angularVelocity.normalized
 ) * transform.up;

 // Apply torque to seek towards target up direction in a stable manner
 Vector3 bankedUp = (Vector3.up + forceVector * 0.3f).normalized;
 rigidbody.AddTorque(Vector3.Cross(predictedUp, bankedUp) * torque);

 Vector3 targetForwardDir = (aimTarget - turret.position);
 targetForwardDir.y = 0;
 targetForwardDir.Normalize();

 // Calculate what the transform.forward direction will be in a little while,
 // given the current angular velocity
 Vector3 predictedForward = Quaternion.AngleAxis(
     rigidbody.angularVelocity.magnitude * Mathf.Rad2Deg * prediction,
     rigidbody.angularVelocity.normalized
 ) * transform.forward;

 // Apply torque to seek towards target forward direction in a stable manner
 rigidbody.AddTorque(Vector3.Cross(predictedForward, targetForwardDir) * torque);

 // Update aiming
 // Set orb turret transform while it is folded out and not controlled by animation
 if (unfolded &amp;&amp; animation["Take 001"].enabled == false) {
     // Find the global direction towards the target and convert it into local space
     Vector3 aimDirInLocalSpace = transform.InverseTransformDirection(aimTarget - turret.position);

     // Find a rotation that points at that target
     Quaternion aimRot = Quaternion.LookRotation(aimDirInLocalSpace);

     // Smoothly rotate the turret towards the target rotation
     float newEulerX = TurnTowards(turret.transform.localEulerAngles.x, aimRot.eulerAngles.x, aimSpeed * Time.deltaTime);
     turret.transform.localEulerAngles = new Vector3(newEulerX, 0, 0);
 }

}

public bool TestPositionCloseToPlayer (float maxDist) { // Get random vector flyTarget = Quaternion.Euler(0, Random.Range(0f, 360f), 0) * new Vector3(0, Random.Range(1f, 5f), Random.Range(3f, maxDist));

 // Set position to be the vector relative to the player position
 flyTarget += player.transform.position;

 // Ensure a minimum height above the ground
 RaycastHit hit;
 float minHeightAbove = 1.5f;
 if (Physics.Raycast(flyTarget+5*Vector3.up, -Vector3.up, out hit, 10)) {
     if (hit.point.y &gt; flyTarget.y - minHeightAbove)
         flyTarget = hit.point + Vector3.up * minHeightAbove;
 }

 LayerMask mask = new LayerMask();
 mask.value = 1;
 if (Physics.CheckCapsule(oldFlyTarget, flyTarget, 1.2f, mask))
     return false;

 return true;

}

public IEnumerator FlyToRandomPosition () { oldFlyTarget = flyTarget;

 // Try up to 100 random positions close to player
 bool success = false;
 for (int i=0; i&lt;100; i++) {
     // Make a position and test if there's a clear path towards it
     if (TestPositionCloseToPlayer(5 + 0.1f*i)) {
         // We have a clear path
         success = true;
         // If we can also shoot the player from the found position,
         // we don't need to test any more positions.
         if (CanShootTargetFromPosition(flyTarget))
             break;
     }
     // yield a frame for every 10 tests
     if ((i % 10) == 0)
         yield return 0;
 }

 // If we can't find a clear path, just stay at the same place for now.
 // The player will probably move to a better location later
 if (!success) {
     Debug.LogWarning("Couldn't find clear path");
     flyTarget = oldFlyTarget;
 }

 flyLerp = 0;

}

public void FoldoutTurret () { animation["Take 001"].normalizedTime = 0; animation["Take 001"].speed = 1; animation.Play("Take 001"); gunAudioSource.PlayOneShot(foldoutSound);

 unfolded = true;

 if (TargetIsInFront() &amp;&amp; CanShootTarget()) {
     player.SendMessage("OnPanic");
     gotBehindYet = false;
     hitsThisRound = 0;
     StartCoroutine(MonitorPlayer());
 }

}

public IEnumerator FoldinTurret () { unfolded = false;

 // Smoothly set turret to neutral position before starting animation
 float eulerX = turret.transform.localEulerAngles.x;
 while (eulerX != 0) {
     if (Time.deltaTime &gt; 0 &amp;&amp; Time.timeScale &gt; 0) {
         eulerX = TurnTowards(eulerX, 0, aimSpeed * Time.deltaTime);
         turret.transform.localEulerAngles = new Vector3(eulerX, 0, 0);
     }
     yield return 0;
 }

 animation["Take 001"].normalizedTime = 1;
 animation["Take 001"].speed = -1;
 animation.Play("Take 001");
 gunAudioSource.PlayOneShot(foldinSound);

 if (hitsThisRound &gt; 8)
     player.SendMessage("OnPain", SendMessageOptions.DontRequireReceiver);
 hitsThisRound = 0;

}

public bool TargetIsInFront () { Vector3 playerDir = player.transform.position-transform.position; playerDir.y = 0; playerDir.Normalize(); return (Vector3.Dot(transform.forward, playerDir) > 0.4f); }

public bool TargetIsBehind () { Vector3 playerDir = player.transform.position-transform.position; playerDir.y = 0; playerDir.Normalize(); return (Vector3.Dot(transform.forward, playerDir) < 0.0f); }

public bool CanShootTarget () { return CanShootTargetFromPosition(turret.position); }

public bool CanShootTargetFromPosition (Vector3 fromPosition) { Vector3 target = player.transform.position + new Vector3(0, 1.4f, 0); Vector3 shootDir = (target - fromPosition).normalized; Ray ray = new Ray(fromPosition, shootDir); RaycastHit hit; if (Physics.Raycast(ray, out hit, 1000, mask)) { if (hit.transform.root.gameObject == player) return true; } return false; }

public void Shoot () { StartCoroutine(ShowMuzzleFlash()); gunAudioSource.PlayOneShot(fireSound);

 Vector3 shootDir = turret.up;
 shootDir += Random.insideUnitSphere * 0.01f;
 Ray ray = new Ray(turret.position, shootDir);
 RaycastHit hit;
 if (Physics.Raycast(ray, out hit, 1000, mask)) {
     hit.transform.root.SendMessage("OnHit", new RayAndHit(ray, hit), SendMessageOptions.DontRequireReceiver);
     muzzleFlash.localRotation = Quaternion.Euler(0, 0, Random.Range(-360, 360));
     muzzleFlash.forward = shootDir;
     fireTrail.localScale = new Vector3(0.2f, 0.2f, hit.distance*2.4f);

     // If player got shot, he obviously isn't in a safe spot anymore
     if (hit.transform.gameObject == player) {
         gotBehindYet = false;
         hitsThisRound++;
         StartCoroutine(MonitorPlayer());
     }
 }

}

void OnHit (RayAndHit rayAndHit) { // Add a big force impact from the bullet hit rigidbody.AddForce(rayAndHit.ray.direction * 200, ForceMode.Impulse);

 // Sometimes, also AddForceAtPosition - this adds some rotation as well.
 // We don't want to allow this too often, otherwise the orb, when being hit constantly,
 // will aim so bad that it's too easy to win.
 if (Random.value &lt; 0.2f)
     rigidbody.AddForceAtPosition(rayAndHit.ray.direction * 15, rayAndHit.hit.point, ForceMode.Impulse);

}

// Function to monitor if player is in a safe spot yet IEnumerator MonitorPlayer () { while (unfolded && !gotBehindYet) { if (TargetIsBehind() || !CanShootTarget()) { if (hitsThisRound > 8) player.SendMessage("OnPain", SendMessageOptions.DontRequireReceiver); else player.SendMessage("OnSafe", SendMessageOptions.DontRequireReceiver); gotBehindYet = true; hitsThisRound = 0; yield return 1; } yield return new WaitForSeconds(1.0f/6); } }

// Make an angle go maxDegreesDelta closer to a target angle public static float TurnTowards (float current, float target, float maxDegreesDelta) { float angleDifference = Mathf.Repeat (target - current + 180, 360) - 180; float turnAngle = maxDegreesDelta * Mathf.Sign (angleDifference); if (Mathf.Abs (turnAngle) > Mathf.Abs (angleDifference)) { return target; } return current + turnAngle; }

// Show muzzle flash for a brief moment IEnumerator ShowMuzzleFlash () { // Show muzzle flash when firing muzzleFlash.gameObject.SetActiveRecursively(true); yield return new WaitForSeconds(0.05f); muzzleFlash.gameObject.SetActiveRecursively(false); }

}

Comment
Add comment · Show 2
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image skovacs1 · Dec 01, 2010 at 06:01 PM 2
Share

Yes. You can. I believe in you. If you need help on the differences between js and c#, try http://answers.unity3d.com/questions/5507/what-are-the-syntax-differences-in-c-and-javascript

avatar image user-6984 (yahoo) · Dec 01, 2010 at 07:07 PM 0
Share

// Use this for initialization void Start () { // Add orb's own layer to mask mask = 1 << gameObject.layer; // Add Igbore Raycast layer to mask mask |= 1 << Layer$$anonymous$$ask.NameToLayer("Ignore Raycast"); // Invert mask mask = ~mask;

Does mask work in javascript?

1 Reply

· Add your reply
  • Sort: 
avatar image
10

Answer by Proclyon · Dec 01, 2010 at 06:20 PM

It's called unity answers. Not unity free labor group

Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

No one has followed this question yet.

Related Questions

Script translation 2 Answers

ChatBox InGame With Slider 3 Answers

Simple C# to JS 1 Answer

Passing an array to a function by reference? 1 Answer

Accessing C# from Javascript? 2 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges