• 物体运动学习笔记(一)


    跟着CatLike大神的教程敲了一遍,记录下学习心得。地址:https://catlikecoding.com/unity/tutorials/ 

    通过Transform的position移动。

    一、通过加速度限制运动物体的速度改变量可以使物体运动更平滑

         float maxSpeedChange = maxAcceleration * Time.deltaTime;
            velocity.x = Mathf.MoveTowards(velocity.x,desiredVelocity.x,maxSpeedChange);
            velocity.z = Mathf.MoveTowards(velocity.z,desiredVelocity.z,maxSpeedChange);

    二、运动物体撞到障碍物反弹速度=-物体速度*障碍物的反弹系数

            if (newPos.x < allowedArea.xMin)
            {
                newPos.x = allowedArea.xMin;
                velocity.x = -velocity.x * bounciness;
            }
            else if (newPos.x > allowedArea.xMax)
            {
                newPos.x = allowedArea.xMax;
                velocity.x = -velocity.x * bounciness;
            }
            if (newPos.z < allowedArea.yMin)
            {
                newPos.z = allowedArea.yMin;
                velocity.z = -velocity.z * bounciness;
            }
            else if (newPos.z > allowedArea.yMax)
            {
                newPos.z = allowedArea.yMax;
                velocity.z = -velocity.z * bounciness;
            }

    完整代码:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class MovingSphere : MonoBehaviour
    {
        [SerializeField,Range(0,10)]
        float maxSpeed = 10;
        [SerializeField, Range(0, 10)]
        float maxAcceleration = 10;
        Vector3 velocity;
        [SerializeField]  //移动范围
        Rect allowedArea = new Rect(-5f,-5f,10f,10f);
        [SerializeField, Range(0f, 1f)]  //反弹系数
        float bounciness = 0.5f;
        private void Update()
        {
            Vector2 playerInput;
            playerInput.x = Input.GetAxis("Horizontal");
            playerInput.y = Input.GetAxis("Vertical");
            playerInput = Vector2.ClampMagnitude(playerInput,1f);
            Vector3 desiredVelocity = new Vector3(playerInput.x,0,playerInput.y)*maxSpeed;
            float maxSpeedChange = maxAcceleration * Time.deltaTime;
            velocity.x = Mathf.MoveTowards(velocity.x,desiredVelocity.x,maxSpeedChange);
            velocity.z = Mathf.MoveTowards(velocity.z,desiredVelocity.z,maxSpeedChange);
            Vector3 displacement = velocity * Time.deltaTime;
            Vector3 newPos = transform.localPosition + displacement;
            if (newPos.x < allowedArea.xMin)
            {
                newPos.x = allowedArea.xMin;
                velocity.x = -velocity.x * bounciness;
            }
            else if (newPos.x > allowedArea.xMax)
            {
                newPos.x = allowedArea.xMax;
                velocity.x = -velocity.x * bounciness;
            }
            if (newPos.z < allowedArea.yMin)
            {
                newPos.z = allowedArea.yMin;
                velocity.z = -velocity.z * bounciness;
            }
            else if (newPos.z > allowedArea.yMax)
            {
                newPos.z = allowedArea.yMax;
                velocity.z = -velocity.z * bounciness;
            }
            transform.localPosition = newPos;
        }
    }
    

      

  • 相关阅读:
    linux安装mongodb磁盘空间不足
    ccf颁奖晚会
    Bug总结流程
    测试自学过程
    一个div,包含两个div,调整文字位置和div平均分布
    一个div,包含三个小的div,平均分布的样式
    测试成长之路
    k8s常用命令记录
    K8S 1.20.6安装dashboard(基于kubernetes-dashboard 2.0.0版本)
    F. Programming Contest
  • 原文地址:https://www.cnblogs.com/DazeJiang/p/14322258.html
Copyright © 2020-2023  润新知