自学内容网 自学内容网

【日志】力扣167.两数之和2 - 输入有序数组 // Unity——Roll A Ball(一)

2024.11.11

【力扣刷题】

167. 两数之和 II - 输入有序数组 - 力扣(LeetCode)

这题返回的是一个指针数组,所以得动态创建这个数组。因为给了一个有序数组,所以可以通过双指针的方式,进行首尾相加判断。

malloc 是C语言的动态内存分配函数,它从堆上分配指定大小的连续内存空间,并返回指向这块内存区域的指针。如果分配成功,则返回非空指针;否则(例如,当系统内存不足时),返回NULL。

int* twoSum(int* numbers, int numbersSize, int target, int* returnSize) {
    int* ret = (int*)malloc(sizeof(int) * 2);
    *returnSize = 2;

    int left = 0, right = numbersSize - 1;
    while (left < right) {
        int sum = numbers[left] + numbers[right];
        if (sum == target) {
            ret[0] = left + 1;
            ret[1] = right + 1;
            return ret;
        }
        if (sum < target) {
            left++;
        } 
        if (sum > target) {
            right--;
        }
    }
    ret[0] = -1, ret[1] = -1;
    return ret;
}

【Unity】

Roll A Ball

1.搭建场景

一个球体(Player)以及一个平面(Ground),并赋予其不同颜色的材质。

小球需要赋予一个刚体(RigidBody)组件。

2.实现小球移动
2.1安装Input System

2.2编写并挂载玩家移动脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerController : MonoBehaviour
{
    public float speed = 5f;
    private Rigidbody rb;
    private float movementX;
    private float movementY;

    // Start is called before the first frame update
    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void OnMove(InputValue movementValue)
    {
        // 获取到输入的移动向量
        Vector2 movementVector = movementValue.Get<Vector2>();
        movementX = movementVector.x;
        movementY = movementVector.y;
    }
    
    // 物理帧更新
    void FixedUpdate()
    {
        // Vector2 记录了水平方向上的移动,转换成 Vector3 时对应x、z轴,y轴为0
        Vector3 movement = new Vector3(movementX, 0.0f, movementY);
        rb.AddForce(movement * speed);
    }
}
2.3编写并挂载摄像机跟随脚本

摄像机需要加高,并且向下旋转45度。

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

public class CameraController : MonoBehaviour
{
    public GameObject player;
    private Vector3 offset;

    // Start is called before the first frame update
    void Start()
    {
        offset = transform.position - player.transform.position;
    }

    // Update is called once per frame
    void LateUpdate() // 确保是在所有的Update函数执行完之后才执行
    {
        transform.position = player.transform.position + offset;
    }

}

——每天努力十五分钟,一年就努力了5475分钟,也就是91.25小时。(记得乘上0.7,这是扣去双休和法定的节假日的时间的)


原文地址:https://blog.csdn.net/wacanda/article/details/143686726

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!