📜  Unity 中的气垫船 - C# (1)

📅  最后修改于: 2023-12-03 15:20:52.683000             🧑  作者: Mango

Unity 中的气垫船 - C#

气垫船游戏是一种很有趣的街机游戏,玩家控制一个气垫船在水面上飞行,并且要躲避各种障碍物。本文将介绍如何使用Unity和C#来创建一个简单的气垫船游戏。

创建气垫船

首先,需要创建一个空的游戏对象,并添加一个刚体组件和一个碰撞器组件。然后,将气垫船的形状建模成一个简单的长方体并将其作为子对象添加到游戏对象中。

public class Hovercraft : MonoBehaviour
{
    private Rigidbody m_Rigidbody;
    private float m_ForwardSpeed = 50f;
    private float m_TurnSpeed = 25f;
    
    void Start()
    {
        m_Rigidbody = GetComponent<Rigidbody>();
    }
    
    void FixedUpdate()
    {
        float forwardMovement = Input.GetAxis("Vertical") * m_ForwardSpeed * Time.fixedDeltaTime;
        float turnMovement = Input.GetAxis("Horizontal") * m_TurnSpeed * Time.fixedDeltaTime;
        
        transform.Rotate(0f, turnMovement, 0f);
        m_Rigidbody.AddForce(transform.forward * forwardMovement, ForceMode.Impulse);
    }
}
为气垫船添加动力学控制

接下来,需要添加气垫船在水面上飞行的物理特性。这可以通过向气垫船添加一个悬浮系统来实现。

public class Hovercraft : MonoBehaviour
{
    private Rigidbody m_Rigidbody;
    private float m_ForwardSpeed = 50f;
    private float m_TurnSpeed = 25f;
    private float m_HoverHeight = 1f;
    private float m_HoverForce = 5f;
    private float m_GravityForce = 10f;
    
    void Start()
    {
        m_Rigidbody = GetComponent<Rigidbody>();
    }
    
    void FixedUpdate()
    {
        float forwardMovement = Input.GetAxis("Vertical") * m_ForwardSpeed * Time.fixedDeltaTime;
        float turnMovement = Input.GetAxis("Horizontal") * m_TurnSpeed * Time.fixedDeltaTime;
        
        transform.Rotate(0f, turnMovement, 0f);
        
        RaycastHit hit;
        if (Physics.Raycast(transform.position, -transform.up, out hit, m_HoverHeight))
        {
            float hoverError = m_HoverHeight - hit.distance;
            float hoverForce = hoverError * m_HoverForce;
            Vector3 gravity = Vector3.down * m_GravityForce * m_Rigidbody.mass;
            m_Rigidbody.AddForce(hoverForce * transform.up + gravity, ForceMode.Acceleration);
        }
        
        m_Rigidbody.AddForce(transform.forward * forwardMovement, ForceMode.Impulse);
    }
}
添加障碍物和得分系统

最后,需要添加一些障碍物和得分系统来增加游戏的难度和乐趣。

public class Obstacle : MonoBehaviour
{
    public int m_ScoreValue = 1;
    
    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            GameManager.Instance.AddScore(m_ScoreValue);
            Destroy(gameObject);
        }
    }
}

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;
    
    private int m_Score;
    
    void Awake()
    {
        Instance = this;
    }
    
    public void AddScore(int amount)
    {
        m_Score += amount;
        Debug.Log("Score: " + m_Score);
    }
}

将障碍物作为子对象添加到场景中,并将其添加碰撞器组件和障碍物脚本。将得分系统作为一个单例实现,并在触发器中触发得分事件,更新得分并销毁障碍物。

至此,一个简单的气垫船游戏就完成了!