
0.Unity资源商店随便下载一些2D资源
1.瓦片地图的创建+碰撞盒子
当然商店2D免费资源里面有瓦片地图,不用自己费时间画图
2.角色的创建+2D刚体+碰撞盒子+脚本
需要注意,2D刚体组件里面需要冻结Z轴(如果你不想自己角色摇摆且倒来倒去)
一些注意事项:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class player : MonoBehaviour
{
private bool Iscanjump=false;//是否能跳跃,默认不能
private Rigidbody2D rig;//2D刚体
public float dropConst;//下坠常数
public float speed;//地面移动速度
public float jumpspeedUp;//上升速度
public float jumpspeedVertiacal;//空中左右移动速度
// Start is called before the first frame update
void Start()
{
rig = GetComponent<Rigidbody2D>();//获取刚体
}
// Update is called once per frame
void Update()
{
move();//移动函数
}
private void move()
{ //水平,垂直俩个轴系
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
//跳跃
if (v >0 && Iscanjump == true)
{
rig.velocity = new Vector2(0, jumpspeedUp);//设置刚体速度,给予向量
}
//长按高跳
if (rig.velocity.y>0&&Input.GetKey(KeyCode.W) && Iscanjump == false)
{
rig.velocity += Vector2.up*0.2f;//长按高跳额外得到向上速度
}
//优化手感
float a = dropConst * 5 - Mathf.Abs(rig.velocity.y);//通过下坠常数,空中速度快为0时,下坠常数a越大,即越快速 度过这个状态
rig.velocity -= Vector2.up * a * Time.deltaTime;
//左右移动
Vector3 vt = new Vector3(h, 0, 0).normalized;//vt为俩个轴系合成的方向向量,normalized单位化
Debug.Log(v);
//空中左右移动,为地面jumpspeedVertiacal倍
if (h != 0 && Iscanjump == false)
{
gameObject.transform.Translate(vt * speed *jumpspeedVertiacal * Time.deltaTime);//通过这个函数来使用vt使得左右移动
}
//地面左右移动
else { gameObject.transform.Translate(vt * speed * Time.deltaTime); }
}
//检测否在地面碰撞盒子检测,通过给地面碰撞盒子transform的tag标签为ground
private void OnCollisionStay2D(Collision2D collision)
{
if (collision.transform.tag == "ground")
{
Iscanjump = true;
}
}
private void OnCollisionExit2D(Collision2D collision)
{
if (collision.transform.tag == "ground")
{
Iscanjump = false;
}
}
}
通过下坠常数,空中速度快为0时,下坠常数a越大,即越快速 度过这个状态,优化跳跃手感
代码优化:

1.转向,通过控制scale的x为相反数来转向。
2.我们会发现由于本体的碰撞盒过大(本体为playerControl脚本),当跳起来的时候,头部会碰到地面或者侧边碰到天上的地面的时候,也会达成跳跃条件,我们为了取得跳跃正常,我们需要在角色下面创建一个空对象,然后命名为bottom,最后将在bottom下新建一个碰撞盒组件,然后这样碰撞盒判断和控制在脚底下(Isjump脚本)。(为什么不直接将本体的碰撞盒缩小至脚底下?因为你需要有自己的大小,使得头不穿过地面。)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class playerControl : MonoBehaviour
{
public bool Iscanjump = false;//是否能跳跃,默认不能
private Rigidbody2D rig;//2D刚体
float ScalX;//获取初始Scale.x,用于转向
public float dropConst;//下坠常数
public float speed;//地面移动速度
public float jumpspeedUp;//上升速度
public float jumpspeedVertiacal;//空中左右移动速度
// Start is called before the first frame update
void Start()
{
ScalX = transform.localScale.x;
}
// Update is called once per frame
void Update()
{
move();//移动函数
}
private void move()
{ //水平,垂直俩个轴系
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
float dir = Input.GetAxisRaw("Horizontal");//方向-1 0 1
//跳跃
if (v > 0 && Iscanjump == true)
{
rig.velocity = new Vector2(0, jumpspeedUp);//设置刚体速度,给予向量
}
//长按高跳
if (rig.velocity.y > 0 && Input.GetKey(KeyCode.W) && Iscanjump == false)
{
rig.velocity += Vector2.up * 0.2f;//长按高跳额外得到向上速度
}
//优化手感
float a = dropConst * 5 - Mathf.Abs(rig.velocity.y);//通过下坠常数,空中速度快为0时,下坠常数a越大,即越快速 度过这个状态
rig.velocity -= Vector2.up * a * Time.deltaTime;
//方向改变
if (dir != 0)
{
transform.localScale = new Vector3(dir* ScalX, transform.localScale.y, transform.localScale.z);//通过改变scale改变方向
}
//左右移动
Vector3 vt = new Vector3(h, 0, 0).normalized;//vt为俩个轴系合成的方向向量,normalized单位化
//空中左右移动,为地面jumpspeedVertiacal倍
if (h != 0 && Iscanjump == false)
{
gameObject.transform.Translate(vt * speed * jumpspeedVertiacal * Time.deltaTime);//通过这个函数来使用vt使得左右移动
}
//地面左右移动
else { gameObject.transform.Translate(vt * speed * Time.deltaTime); }
}
}
将bottom的碰撞盒改成触发器

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class IsJump : MonoBehaviour
{
//为了优化跳跃碰撞盒,在父物体下面新建空对象bottoom,并添加碰撞盒,用来检测底部(以前碰撞盒头碰到顶部地面还能跳不符合常理,所以需要作此操作)
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
//检测否在地面碰撞盒子检测,通过给地面碰撞盒子transform的tag标签为ground
private void OnTriggerStay2D(Collider2D collision)
{
if (collision.transform.tag != "untagged")
{
transform.GetComponentInParent<playerControl>().Iscanjump = true;//获取父物体脚本变量并赋值
}
}
private void OnTriggerExit2D(Collider2D collision)
{
if (collision.transform.tag != "untagged")
{
transform.GetComponentInParent<playerControl>().Iscanjump = false;//获取父物体脚本变量并赋值
}
}
}
下一篇
我的代码目前看起来像这样numbers=[1,2,3,4,5]defpop_threepop=[]3.times{pop有没有办法在一行中完成pop_three方法中的内容?我基本上想做类似numbers.slice(0,3)的事情,但要删除切片中的数组项。嗯...嗯,我想我刚刚意识到我可以试试slice! 最佳答案 是numbers.pop(3)或者numbers.shift(3)如果你想要另一边。 关于ruby-多次弹出/移动ruby数组,我们在StackOverflow上找到一
当我在我的Rails应用程序根目录中运行rakedoc:app时,API文档是使用/doc/README_FOR_APP作为主页生成的。我想向该文件添加.rdoc扩展名,以便它在GitHub上正确呈现。更好的是,我想将它移动到应用程序根目录(/README.rdoc)。有没有办法通过修改包含的rake/rdoctask任务在我的Rakefile中执行此操作?是否有某个地方可以查找可以修改的主页文件的名称?还是我必须编写一个新的Rake任务?额外的问题:Rails应用程序的两个单独文件/README和/doc/README_FOR_APP背后的逻辑是什么?为什么不只有一个?
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01 客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02 数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit
目录1.AdmobSDK下载地址2.将下载好的unityPackagesdk导入到unity里编辑 3.解析依赖到项目中
Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u
我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions
写在之前Shader变体、Shader属性定义技巧、自定义材质面板,这三个知识点任何一个单拿出来都是一套知识体系,不能一概而论,本文章目的在于将学习和实际工作中遇见的问题进行总结,类似于网络笔记之用,方便后续回顾查看,如有以偏概全、不祥不尽之处,还望海涵。1、Shader变体先看一段代码......Properties{ [KeywordEnum(on,off)]USL_USE_COL("IsUseColorMixTex?",int)=0 [Toggle(IS_RED_ON)]_IsRed("IsRed?",int)=0}......//中间省略,后续会有完整代码 #pragmamulti_c
三分钟集成Tap防沉迷SDK(Unity版)一、SDK介绍基于国家对上线所有游戏必须增加防沉迷功能的政策下,TapTap推出防沉迷SDK,供游戏开发者进行接入;允许未成年用户在周五、六、日以及法定节假日晚上8:00-9:00进行游戏,防沉谜时间段进入游戏会弹窗进行提示!开发环境要求:Unity2019.4或更高版本iOS10或更高版本Android5.0(APIlevel21)或更高版本🔗Unity集成Demo参考链接🔗UnityTapSDK功能体验APK下载链接二、集成前准备1.创建应用进入开发者后台,按照提示开始创建应用;2.开通服务在使用TDS实名认证和防沉迷服务之前,需要在上面创建的应
写在前面前两天学习并整理的大气散射基础知识:【Unity大气渲染】关于单次大气散射的理论知识,收获了很多,但不得不承认的是,这其实已经是最早的、90年代的非常古老的方法了,后来也出现了一些优化性的计算思路和方法。因此,我打算先不急着跟各种教程在Unity中实现大气散射,而是再花时间来看看最近的游戏是如何去实现大气渲染的:06.游戏中地形大气和云的渲染(下)|GAMES104-现代游戏引擎:从入门到实践接下来就跟着GAMES104讲地形大气和云渲染的部分学习并做简单的记录,涉及到之前没提到的Mie散射也只选择直接截图PPT的方式记录啦!毕竟对于做作品来说,之后实现出来才是重要的~当然,May佬的