【Unity类-Transform类】从0做一个太阳系太空漫游游戏

该文章已生成可运行项目,

 API  https://docs.unity3d.com/2022.3/Documentation/ScriptReference/Transform.html

相关类:

1.实现飞机移动控制
 

  // 这个脚本实现控制飞机前后移动,方向由鼠标控制
    //1.WS控制前后移动2.鼠标控制上下左右旋转3.AD控制倾斜

第一版 飞机移动

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//【客户】->【你】—>【Unity】
//【客户-业务逻辑】1.用W S 控制飞机前后移动  2.A和D 控制飞机左右旋转
//【你-程序逻辑】1.如用户按下W 就控制飞机往Z 轴方向移动  2.如果用户按下AD 就控制飞机围绕Y 轴旋转
//By leoyang 2025.10.11
//[Unity]
public class MoveControll : MonoBehaviour
{
    //如何把美术素材拿到代码里面
    public float moveSpeed = 15f;
    public float rotateSpeed = 15f;
    public Transform airplan;     
    void Update() 
    {
        if (Input.GetKey(KeyCode.W))
        {
            airplan.Translate(0, 0, moveSpeed * Time.deltaTime);

        }
        if (Input.GetKey(KeyCode.S))
        {
            airplan.Translate(0, 0, -moveSpeed * Time.deltaTime);

        }
        if (Input.GetKey(KeyCode.A))
        {
            airplan.Rotate(new Vector3(0, 555555, 0), -rotateSpeed * Time.deltaTime);

        }
        if (Input.GetKey(KeyCode.D))
        {
            airplan.Rotate(new Vector3(0, 555555, 0), rotateSpeed * Time.deltaTime);

        }
    }


}

第二版 飞机移动

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    // 这个脚本实现控制飞机前后移动,方向由鼠标控制
    //1.WS控制前后移动2.鼠标控制上下左右旋转3.AD控制倾斜
    //2025.4.2@leoyang 
    public GameObject PlayerPlane;
    public float Speed=10f;
    public float RotateSpeed = 5f;
//---------------------
    void Update()
    {
        if (Input.GetKey(KeyCode.W))
        {
            PlayerPlane.transform.Translate(new Vector3(0, 0, 1* Speed * Time.deltaTime));

        }
        if (Input.GetKey(KeyCode.S))
        {
            PlayerPlane.transform.Translate(new Vector3(0, 0,-1* Speed*Time.deltaTime));
        }
        if (Input.GetKey(KeyCode.A))
        {
            PlayerPlane.transform.Rotate(new Vector3(0, 0, 1* RotateSpeed*Time.deltaTime));
        }
        if (Input.GetKey(KeyCode.D))
        {
            PlayerPlane.transform.Rotate(new Vector3(0, 0, -1 * RotateSpeed * Time.deltaTime));
        }



    }
}

第三版 飞机移动

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    // 这个脚本实现控制飞机前后移动,方向由鼠标控制
    //1.WS控制前后移动2.鼠标控制上下左右旋转3.AD控制倾斜
    //2025.4.2@leoyang 
    public GameObject PlayerPlane;
    public float Speed=10f;
    public float RotateSpeed = 5f;

    public float ViewRotateSpeed = 10f;

    //---------------------
    private void Start()
    {
        Cursor.lockState = CursorLockMode.Locked;
    }

    void Update()
    {
        MoveController();
        ViewController();
    }
    /// <summary>
    /// 控制飞机基本移动
    /// </summary>
    void MoveController()
    {


        float tempValue = Input.GetAxis("Vertical");
      

        PlayerPlane.transform.Translate(new Vector3(0, 0, tempValue * Speed * Time.deltaTime));


        float tempADValue = Input.GetAxis("Horizontal");
        PlayerPlane.transform.Rotate(new Vector3(0, 0, tempADValue * RotateSpeed * Time.deltaTime));
       
        
       


    }
    /// <summary>
    /// 这个函数是通过鼠标控制视角方向
    /// </summary>
    void ViewController()
    {
        //Input.mousePosition.x
        float RotateXValue= Input.GetAxis("Mouse X");
        PlayerPlane.transform.Rotate(new Vector3(0, RotateXValue * ViewRotateSpeed*Time.deltaTime,0));


        float RotateYValue = Input.GetAxis("Mouse Y");
        PlayerPlane.transform.Rotate(new Vector3(RotateYValue * ViewRotateSpeed*Time.deltaTime,0,0));
    }
}

2.实现摄像机看向飞机

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LookATPlayer : MonoBehaviour
{
    // 1. 2.
    public Transform CameraTran;
    public Transform PlayerTran;
    

    void Update()
    {
        CameraTran.LookAt(PlayerTran);
    }
}

3.月球围绕地球转

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MoonRotateAround : MonoBehaviour
{
    // 这个脚本是实现,一个球围绕另一个球旋转,保持一定距离
    // 1.把月球拿到代码里 2.把被围绕的物体拿到代码里 3.围绕旋转
    
    // 声明公共变量,可以在Unity编辑器的Inspector面板中直接赋值
    public GameObject MoonObj;      // 引入月球对象(围绕旋转的物体)
    public GameObject EarthObj;     // 引入地球对象(被围绕的中心物体)
    
    // 旋转速度,控制月球围绕地球旋转的快慢
    // float是浮点数类型,用于存储小数
    // 设置为10f表示每秒旋转10度
    float rotateAroundSpeed = 10f;

    // Update方法在每一帧都会被调用
    // 游戏通常以每秒60帧的速度运行,所以这个方法会频繁执行
    void Update()
    {
        // 使用RotateAround方法让月球围绕地球旋转
        // RotateAround方法需要三个参数:
        // 1. 旋转中心点:EarthObj.transform.position - 地球的位置坐标
        // 2. 旋转轴:new Vector3(0, 1, 0) - 围绕Y轴旋转
        //    Vector3(0, 1, 0) 表示Y轴方向
        //    如果要围绕X轴旋转,使用 Vector3(1, 0, 0)
        //    如果要围绕Z轴旋转,使用 Vector3(0, 0, 1)
        // 3. 旋转角度:rotateAroundSpeed * Time.deltaTime
        //    Time.deltaTime是上一帧到当前帧的时间间隔
        //    乘以Time.deltaTime可以让旋转速度与帧率无关,确保在不同性能的电脑上旋转速度一致
        MoonObj.transform.RotateAround(EarthObj.transform.position, new Vector3(0, 1, 0), rotateAroundSpeed * Time.deltaTime);
        
        // 被注释掉的代码 - 这是一行错误的示例
        // 错误原因:RotateAround的第一个参数应该是位置坐标,而不是旋转角度
        // 第二个参数应该是旋转轴向量,而不是浮点数
        // MoonObj.transform.RotateAround(new Vector3(0, MoonObj.transform.rotation.y, 0), 10f);
    }
}

本文章已经生成可运行项目
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Unity青子

难题的解决使成本节约,求打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值