C# 试图理解统一

C# 试图理解统一,c#,unity3d,C#,Unity3d,我的场景中有一个立方体(播放器)和一个平面(地板)。两者都有连接到它们的碰撞器,并且只有一个刚体组件连接到立方体。立方体被放置在平面上 日志 我不明白为什么我会得到最后3个值。(这些也是disvalue的值) 代码 using System.Collections; using System.Collections.Generic; using UnityEngine; public class jump : MonoBehaviour { private Rigidbody rb;

我的场景中有一个立方体(播放器)和一个平面(地板)。两者都有连接到它们的碰撞器,并且只有一个刚体组件连接到立方体。立方体被放置在平面上

日志

我不明白为什么我会得到最后3个值。(这些也是
dis
value的值)

代码

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

public class jump : MonoBehaviour {
    private Rigidbody rb;
    private float initialPos = 0.5f ;
    // Use this for initialization
    void Start () {
        rb = GetComponent<Rigidbody>();

    }

    // Update is called once per frame
    void Update () {


        //Debug.Log(rb.velocity.magnitude);


        if (Input.GetKeyDown(KeyCode.Space))
        {


            rb.velocity = new Vector3(0f , 1f , 0f) * 10 ;
            Debug.Log(rb.velocity);
        }



        if (rb.velocity.y > 0  && !Input.GetKey(KeyCode.Space))
        {
            float dis = rb.transform.position.y - initialPos;
            Debug.Log(dis);

            rb.velocity += new Vector3(0f, 1f, 0f) * Physics.gravity.y;

            //Debug.Log(rb.velocity);
            //Debug.Log("I am here");
            //rb.velocity = Vector3.zero;
        }

    }

    private void OnCollisionEnter(Collision collision)
    {

        rb.velocity = Vector3.zero;
        Debug.Log(rb.velocity);
        Debug.Log("...........................Collision " + gameObject.name);


    }
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类跳跃:单一行为{
私人刚体;
私人浮动初始位置=0.5f;
//用于初始化
无效开始(){
rb=GetComponent();
}
//每帧调用一次更新
无效更新(){
//Debug.Log(rb.velocity.magnity);
if(Input.GetKeyDown(KeyCode.Space))
{
rb.velocity=新矢量3(0f,1f,0f)*10;
调试日志(rb.velocity);
}
if(rb.velocity.y>0&&!Input.GetKey(KeyCode.Space))
{
float dis=rb.transform.position.y-initialPos;
调试日志(dis);
rb.速度+=新矢量3(0f,1f,0f)*物理.重力.y;
//调试日志(rb.velocity);
//Log(“我在这里”);
//rb.速度=矢量3.0;
}
}
专用void OnCollisionEnter(碰撞)
{
rb.速度=矢量3.0;
调试日志(rb.velocity);
Debug.Log(“………..冲突”+游戏对象.name);
}
}

双击编辑器中的日志,它将显示哪行代码正在打印什么。从这里--
float dis=rb.transform.position.y-initialPos。但我不知道为什么。只有当
(rb.velocity.y>0&&!Input.GetKey(KeyCode.Space))
为true时,控件才应转到该块。当立方体在跳跃后撞击表面时,将打印这些消息。在其(立方体)下落过程中,下落速度为负,当它撞击表面时,我将其速度设置为零。Y速度>0,并且未按下空格键
if(rb.velocity.y>0&&!Input.GetKey(KeyCode.Space))
…所以它正在打印该值。这是一门完整的C#unity课程。我不认为评论部分会帮助你理解Unity和C#fully这正是我要问的<代码>!Input.GetKey(KeyCode.Space))
为真,但设置
rb.velocity.y>0时如何实现
rb.velocity=Vector3.0
OnCollisionCenter(碰撞)
中。您只需将该帧的速度设置为0。下一帧,物理引擎将再次开始移动对象。