草庐IT

Unity案例 移动汽车

xasasddc 2024-01-01 原文
  • 新建一个3D项目

  • 地面

1、在Hierarchy窗口,右键->3D Object->Plane,建一个地面,命名为Floor。

2、在Project窗口,Scenes文件夹下,右键->Create->Material,给地面建一个材质,命名为floor

3、更改Floor大小

4、给Material的floor添加颜色,或者其他的材质。

5、把Material的floor拖拽到Hierarchy窗口的 Floor上

  • 小车

这里有三种方式

方式一:从Asset Store中搜索free car,选择自己喜欢的, 下载并import进Unity

方式二:自己建。在Hierarchy窗口新建一个Cube作为小车的主体,然后四个Cylinder作为小车的轮子。大概长这样。

方式三:

在自己电脑中导入之前的包。在Asset->右键->import packages.

将小车调至合适的位置

  • Car

1、在Hierarchy窗口的轮子,按照在小车上的顺序命名,这个命名很重要,不能顺序有问题。

左前(LF),左后(LB),右前(RF),右后(RB)。

2、在这个窗口内右键->Create Empty建立一个空的GameObject,命名为Wheel,将四个轮子拖进去。


3、复制Wheel文件(快捷键Ctrl+D),命名为WheelController。

这个文件时之后代码控制轮子及小车移动的主要文件。

然后在WheelController文件夹下的WheelLF,WheelLB,WheelRF,WheelRB中分别右键->Create Empty.

将四个GameObject单独拖至WhellController文件夹,并按照小车上轮子的顺序以此命名。下,WheelLF,WheelLB,WheelRF,WheelRB四个删除。

完成之后大概这样:

 

 为WhellController文件夹的 四个轮子添加Wheel Collider的Component。

配置参数,合理配置

配置完成之后的绿色的线是包裹着轮胎的,四个都是

 

在整个Car文件中的 inspector建立下图两个Component。

Box Collider ->Edit Collider ,将长方形调至合适的位置。

Add Component->New Scripts,命名为Car Controller。

双击进入Visual Studio进行编辑。

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

public class CarController : MonoBehaviour
{
    private float h;//横轴的输入
    private float v;//纵轴的输入

    private float angle;//角度

    public WheelCollider lf, rf, lb, rb;

    public Transform lfT, rfT, lbT, rbT;

    public float angleSpeed = 30f;//转向速度
    public float speed = 30f;//移动速度

    public void FixedUpdate()
    {
        h = Input.GetAxis("Horizontal");
        v = Input.GetAxis("Vertical");

        //转向
        angle = angleSpeed * h;
        lf.steerAngle = angle;//左前
        rf.steerAngle = angle;//右前

        //移动
        lf.motorTorque = v * speed;
        rf.motorTorque = v * speed;

        UpdateWheel(lfT, lf);
        UpdateWheel(rfT, rf);
        UpdateWheel(lbT, lb);
        UpdateWheel(rbT, rb);

        if(Input.GetKey(KeyCode.Space))
        {
            lf.brakeTorque = 1000f;
            rf.brakeTorque = 1000f;
            lb.brakeTorque = 1000f;
            rb.brakeTorque = 1000f;
        }
        else
        {
            lf.brakeTorque = 0;
            rf.brakeTorque = 0;
            lb.brakeTorque = 0;
            rb.brakeTorque = 0;
        }
    }

    //同步车轮
    void UpdateWheel(Transform trans,WheelCollider wheel)
    {
        Vector3 pos = trans.position;
        Quaternion rot = trans.rotation;
        wheel.GetWorldPose(out pos, out rot);//将轮胎的位置以及角度给到上面的值
        trans.position = pos;
        trans.rotation = rot;
    }
}

Car的Inspector窗口的Script我们在文件中的声明,需要一一对应。

到这里车虽然动了,但是镜头不会跟随。

  • 镜头跟随 

将摄像头调至合适的位置,在Main Camera的Inspector窗口,Add Component->New Scripts,命名为CameraController。

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

//摄像机跟随
public class CameraController : MonoBehaviour
{
    public Transform obj;
    public Vector3 offset;

    //速度
    public float fSpeed = 10;
    public float lSpeed = 10;

    //转向
    public void LookAtTrager()
    {
        Vector3 rot = obj.position - this.transform.position;
        Quaternion _rot = Quaternion.LookRotation(rot, Vector3.up);
        transform.rotation = Quaternion.Lerp(transform.rotation, _rot, lSpeed * Time.deltaTime);
    }

    //移动
    public void MoveToTarger()
    {
        Vector3 pos = obj.position + obj.forward * offset.z
            + obj.right * offset.x
            + obj.up * offset.y;
        transform.position = Vector3.Lerp(transform.position,pos, fSpeed * Time.deltaTime);
    }
   
    public void FixedUpdate()
    {
        LookAtTrager();
        MoveToTarger();
    }
}

 OK!完事儿!

 

有关Unity案例 移动汽车的更多相关文章

  1. ruby - 多次弹出/移动 ruby​​ 数组 - 2

    我的代码目前看起来像这样numbers=[1,2,3,4,5]defpop_threepop=[]3.times{pop有没有办法在一行中完成pop_three方法中的内容?我基本上想做类似numbers.slice(0,3)的事情,但要删除切片中的数组项。嗯...嗯,我想我刚刚意识到我可以试试slice! 最佳答案 是numbers.pop(3)或者numbers.shift(3)如果你想要另一边。 关于ruby-多次弹出/移动ruby​​数组,我们在StackOverflow上找到一

  2. ruby-on-rails - 如何重命名或移动 Rails 的 README_FOR_APP - 2

    当我在我的Rails应用程序根目录中运行rakedoc:app时,API文档是使用/doc/README_FOR_APP作为主页生成的。我想向该文件添加.rdoc扩展名,以便它在GitHub上正确呈现。更好的是,我想将它移动到应用程序根目录(/README.rdoc)。有没有办法通过修改包含的rake/rdoctask任务在我的Rakefile中执行此操作?是否有某个地方可以查找可以修改的主页文件的名称?还是我必须编写一个新的Rake任务?额外的问题:Rails应用程序的两个单独文件/README和/doc/README_FOR_APP背后的逻辑是什么?为什么不只有一个?

  3. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  4. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

  5. unity---接入Admob - 2

    目录1.AdmobSDK下载地址2.将下载好的unityPackagesdk导入到unity里​编辑 3.解析依赖到项目中

  6. Unity 3D 制作开关门动画,旋转门制作,推拉门制作,门把手动画制作 - 2

    Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u

  7. 「Python|Selenium|场景案例」如何定位iframe中的元素? - 2

    本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决

  8. ruby-on-rails - rbenv:从 RVM 移动到 rbenv 后,在 Jenkins 执行 shell 中找不到命令 - 2

    我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions

  9. Unity Shader 学习笔记(5)Shader变体、Shader属性定义技巧、自定义材质面板 - 2

    写在之前Shader变体、Shader属性定义技巧、自定义材质面板,这三个知识点任何一个单拿出来都是一套知识体系,不能一概而论,本文章目的在于将学习和实际工作中遇见的问题进行总结,类似于网络笔记之用,方便后续回顾查看,如有以偏概全、不祥不尽之处,还望海涵。1、Shader变体先看一段代码......Properties{ [KeywordEnum(on,off)]USL_USE_COL("IsUseColorMixTex?",int)=0 [Toggle(IS_RED_ON)]_IsRed("IsRed?",int)=0}......//中间省略,后续会有完整代码 #pragmamulti_c

  10. 三分钟集成 TapTap 防沉迷 SDK(Unity 版) - 2

    三分钟集成Tap防沉迷SDK(Unity版)一、SDK介绍基于国家对上线所有游戏必须增加防沉迷功能的政策下,TapTap推出防沉迷SDK,供游戏开发者进行接入;允许未成年用户在周五、六、日以及法定节假日晚上8:00-9:00进行游戏,防沉谜时间段进入游戏会弹窗进行提示!开发环境要求:Unity2019.4或更高版本iOS10或更高版本Android5.0(APIlevel21)或更高版本🔗Unity集成Demo参考链接🔗UnityTapSDK功能体验APK下载链接二、集成前准备1.创建应用进入开发者后台,按照提示开始创建应用;2.开通服务在使用TDS实名认证和防沉迷服务之前,需要在上面创建的应

随机推荐