我将如何在 c# 中实现 java 代码,反之亦然



我正在尝试在unity中创建一个游戏,但是Java无法在其中使用,因此任何预制脚本都是C#。我想在游戏机制中添加一些东西,这需要我在脚本中更改变量和值,但我只知道如何在 java 中做到这一点,那么我该如何做到这一点才能让他们能够有效地沟通呢?

来自 c# 的示例:

    protected override void ComputeVelocity()
{
    Vector2 move = Vector2.zero;
    move.x = Input.GetAxis ("Horizontal");
    if (Input.GetButtonDown ("Jump") && grounded) {
        velocity.y = jumpTakeOffSpeed;
    } else if (Input.GetButtonUp ("Jump"))
    {
        if (velocity.y > 0)
            velocity.y = velocity.y * .5f;
    }
    targetVelocity = move * maxSpeed;
}
}

和我的 Java 代码:

public void keyPressed(KeyEvent e) 
{
    if(e.getKeyCode() == KeyEvent.VK_SHIFT)
    { 
        endTime = (System.currentTimeMillis() / 1000);
        timePassed = endTime - startTime; 
        if(timePassed >= 2)
        {   
            //try to set a time limit or something 
            velocity = overMaxVelocity;
            //set velocity to above usual max for dodgeTime 
            startTime = dodgeTime + (System.currentTimeMillis() / 1000);
        }

    }
}

我试图让它在按下移位时,速度在短时间内更改为比平时更大的值,但我不知道从哪里开始

Unity

仅支持用 C# 编写的脚本。它曾经也支持他们称之为UnityScript的JavaScript版本,但现在他们只正式支持C#。幸运的是,C#与Java非常相似,因此将脚本转换为C#应该不会有太多麻烦。主要的挑战是学习 Unity 库。

我在下面编写了一些代码,使用 Unity 库函数更新对象的速度。Unity 有很多内置的方法来帮助您作为开发人员,因此我推荐 Unity 网站上的教程以获取有关开始使用它的更多信息。

public float speed = 2;
public float speedUpFactor = 2;
// Get the Rigidbody component attached to this gameobject
// The rigidbody component is necessary for any object to use physics)
// This gameobject and any colliding gameobjects will also need collider components
Rigidbody rb;
// Start() gets called the first frame that this object is active (before Update)
public void Start(){
    // save a reference to the rigidbody on this object
    rb = GetComponent<Rigidbody>();
}
}// Update() gets called every frame, so you can check for input here.
public void Update() {
    // Input.GetAxis("...") uses input defined in the "Edit/Project Settings/Input" window in the Unity editor.
    // This will allow you to use the xbox 360 controllers by default, "wasd", and the arrow keys.
    // Input.GetAxis("...") returns a float between -1 and 1
    Vector3 moveForce = new Vector3(Input.GetAxis ("Horizontal"), 0, Input.GetAxis("Vertical"));
    moveForce *= speed;
    // Input.GetKey() returns true while the specified key is held down
    // Input.GetKeyDown() returns true during the frame the key is pressed down
    // Input.GetKeyUp() returns true during the frame the key is released
    if(Input.GetKey(KeyCode.Shift)) 
    {
        moveForce *= speedUpFactor;
    }
    // apply the moveForce to the object
    rb.AddForce(moveForce);
}

最新更新