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

9 篇文章 0 订阅

创建

首先,我们在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可以更改。

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值