首页 > 编程语言 >unity+c#小项目练习 左右移动和碰撞

unity+c#小项目练习 左右移动和碰撞

时间:2024-03-16 21:32:01浏览次数:17  
标签:AddForce c# void 练习 unity rb Time Input public

创建

首先,我们在Hierarchy面板创建两个cube,将其命名为player和player1,

将player1的Scale均改为10,两者都要挂载上Rigidbody哦,切记!!!

两者相撞还是会飞出去,是因为什么呢?因为两者质量是1,将player1的质量调成10,会被player推动,但是不会撞飞。懂了吧,质量!!!

ok,我们来看看代码,这个是在scripits里创建的PlayerMovement文件,看清楚,这里我们有两个c#文件,挂载的位置不一样。


using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
   public Rigidbody rb;
   
    void Start()
    {
      
    }

    
    void Update()//每帧都运行,输入部分放置在这里
    {
        
    }
    private void FixedUpdate()//物理类型
    {
        rb.AddForce(0,2, 200*Time.deltaTime);//均衡不同电脑帧率
     }
}

将player1隐藏起来,着重看player,将质量改成1,发现运行他就出去了。

接下来,将最后一句改成如下:

 rb.AddForce(0,0, 2000*Time.deltaTime);

发现它往前翻滚。在Rigidbody的Freeze Rotation勾选x约束或者在assets右键选择create点击physic Material。分别是动力摩擦力1静止,0类似很滑几乎没有摩擦力,下来是弹力,将其全部改成0。

将其添加到ground的Collider里边的Material里。两个方法,以后者为例使用。

启动后发现player很光滑往前走。

在面板上控制速度


using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
   public Rigidbody rb;
    public float forwardForce = 2000f;
    

    void Start()
    {
       
    }

    
    void Update()//每帧都运行,输入部分放置在这里
    {
        leftPressed = Input.GetKey("a");
        rightPressed= Input.GetKey("d");
    }
    private void FixedUpdate()//物理类型
    {
        rb.AddForce(0,0, forwardForce*Time.deltaTime);//均衡不同电脑帧率
       
    }
    
}

使用forwardForce取代了2000,这是我们自己起的名字,向前的力取2000,浮点数加个f。

将player的c#处的改成500会发现它运动的慢了。此处数值可以自己调节。

面板上进行输入


using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
   public Rigidbody rb;
    public float forwardForce = 2000f;
    public float sideWaysForce = 500f;
   
    void Start()
    {
       
    }

    
    void Update()//每帧都运行,输入部分放置在这里
    {
        leftPressed = Input.GetKey("a");
        rightPressed= Input.GetKey("d");
    }
    private void FixedUpdate()//物理类型
    {
        rb.AddForce(0,0, forwardForce*Time.deltaTime);//均衡不同电脑帧率
        if (Input.GetKey("d"))
        {
            rb.AddForce(sideWaysForce* Time.deltaTime, 0, 0);
        }
        if (Input.GetKey("a"))
        {
            rb.AddForce(-sideWaysForce * Time.deltaTime, 0, 0);
        }
    }
   
}

FixedUpdate:

固定帧更新,以固定的频率调用的函数,更新频率默认0.02s。是在固定的时间间隔执行,不受游戏帧率的影响。edit里找time可以更改。

标签:AddForce,c#,void,练习,unity,rb,Time,Input,public
From: https://blog.csdn.net/Cao__Ye/article/details/136766879

相关文章

  • 图像处理ASIC设计方法 笔记10 插值算法的流水线架构
    (一)三次插值算法实现的图像旋转设计的流水线架构传统上,三次插值算法实现的图像旋转设计需要三块一样的处理资源,为了节约资源,采用流水线设计,简单来讲就是三次插值算法共用一块资源,优化这部分使用的存储器结构,以达成流水线的目标。插值算法最直接的是需要DFF模块,现在对它进......
  • unity--控制小球运动与销毁
    和上一章一样,先建立一个模型在test里继续写代码驱动。在上一章已经描述过如何让小球前后左右移动了。这次我换了一个更完美点的模型,和上章大差不差。再往里放入一个cube,将其rename成Enemy。在他跟处找到AddTag添加一个Enmey,并选择这个tag。player有Rigidbody,给物体一个作......
  • LLM大语言模型(七):部署ChatGLM3-6B并提供HTTP server能力
    目录HighLight部署ChatGLM3-6B并开启HTTPserver能力下载embedding模型bge-large-zh-v1.5HTTP接口问答示例LLM讲了个尴尬的笑话~HighLight将LLM服务化(如提供HTTPserver能力),才能在其上构建自己的应用。部署ChatGLM3-6B并开启HTTPserver能力下载embedding模型bge-l......
  • 【C语言步行梯】各类操作符、类型转换与原码、反码、补码详谈
    ......
  • 华为OD机试 C++ -文件缓存系统
    文件缓存系统前言:本专栏将持续更新互联网大厂机试真题,并进行详细的分析与解答,包含完整的代码实现,希望可以帮助到正在努力的你。关于大厂机试流程、面经、面试指导等,如有任何疑问,欢迎联系我,wechat:steven_moda;email:[email protected];备注:CSDN。题目描述请设计一个文件缓......
  • JavaScript学习 第三天
    一、数组(一)数组基本知识声明按顺序保存数据的数据类型<body><script>letarr=[1,2,'猪儿',true]</script></body>声明数组函数<body><script>letarr=newArray(1,2,'猪儿',true)</script></body>......
  • JavaScript学习 第一天
    一、什么是JavaScript(一)介绍是一种运行在浏览器的编程语言,进行人机交互(二)可以做什么可以做网页特效,表单验证,进行数据交互,还有服务端编程node.js(三)组成由ECMAScript和WebAPIs组成其中WebAPIs由DOM和BOM组成ECMAScript:js基础语法知识WebAPIs:DOM:操作文......
  • conda 安装R以及在 Jupyter Notebook中运行 R 代码
    1.打开命令行工具,输入以下命令,创建一个新的conda环境并激活:condacreate-nmyenvr-base==4.2.2condaactivatemyenv如碰到PackagesNotFoundError问题解决,使用以下命令,将conda-forge通道添加到通道列表中:condaconfig--appendchannelsconda-forge2.在conda环境中安......
  • 使用c#实现23种常见的设计模式
     设计模式通常分为三个主要类别:创建型模式结构型模式行为型模式。这些模式是用于解决常见的对象导向设计问题的最佳实践。以下是23种常见的设计模式并且提供c#代码案例:创建型模式:1.单例模式(Singleton)publicsealedclassSingleton{//创建一个只读的静......
  • 关于安装Ubuntu/Arch wsl的error:0xffffffff报错
    运行Arch/Ubuntuwsl时报错//报错如下WslRegisterDistributionfailedwitherror:0xffffffffError:0xffffffff(null)原因:53端口被占用解决方法:win+r打开运行窗口输入resmon.exe回车。找到侦听窗口栏,查看占用53端口的PID。ctrl+shift+Esc打开任务管理器。在搜索栏......