前几天想做一个平面类似吃金币的游戏
四面是墙,角色在墙间跳跃
金币在中间生成
吃到加分
于是乎
角色拿圆柱做
墙是方块
地板也是方块
想法是鼠标控制角色的跳跃
之前有点基础,但还是去找了一下别人是怎么实现的
然后自己改出来的
添加了刚体2d组件(RigidBody2D)
移动,转向的代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class move : MonoBehaviour
{
private Rigidbody2D rb2D;//先定义刚体rn2D
public float movespeed = 40f;//移速(推力?)
// Start is called before the first frame update
void Start()
{
rb2D = GetComponent<Rigidbody2D>();//刚体需要先实例化
}
// Update is called once per frame
void Update()
{
playermove();
}
void playermove()
{
//获取鼠标坐标
//获取物体坐标,将世界坐标转为屏幕坐标
//鼠标坐标-物体坐标得到向量
//z置0
//向量化
//transform的UP方向改为dreaction方向达到跟随旋转
Vector3 mouse = Input.mousePosition;
Vector3 obj = Camera.main.WorldToScreenPoint(transform.position);
Vector3 direction = mouse - obj;
direction.z = 0f;
direction = direction.normalized;
transform.up = direction;
if (Input.GetMouseButtonDown(0))//按下鼠标左键(0是左键)
{
//刚体的速度=向量*移速
rb2D.velocity = direction * movespeed;
}
}
}
效果如图
但是我想让他停在墙上不要滑动
player加了个圆的碰撞器,不然转向的时候可能会有力的作用
加了个检测碰撞的代码,给墙上了"wall"的tag 和碰撞器
private void OnCollisionEnter2D(Collision2D collision)//碰撞器检测函数
{
Debug.Log(collision.gameObject.tag);
if (collision.gameObject.tag == "wall" )
{
Vector2 tp = rb2D.velocity;
//撞墙停止
rb2D.velocity = tp.normalized * 0f;
//效果不好,注释掉
//rb2D.velocity = Vector2.zero;
}
}
//下面那个v=Vector2.zero,亲测撞到之后有几率反向移动
还是直接速度的向量*0更好一点
效果图