【日志】力扣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,这是扣去双休和法定的节假日的时间的)