水果忍者VR原型 二
一、水果模型导入
1、导入.fbx文件并设置缩放
2、将其拖入到Assets中作为prefeb
二、设置水果生成机制
1、给水果添加Rigidbody组件,设置使用重力
2、为了允许碰撞,添加Mesh Collider组件,勾选Convex
3、删除场景中的水果模型
4、编写脚本SpawnPoint
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class SpawnPoint : MonoBehaviour {//水果数组public GameObject[] fruitPreb;// Use this for initializationvoid Start () {StartCoroutine(createFruit());}//生成水果IEnumerator createFruit(){while (true){//随机生成一种水果GameObject fruitClone = Instantiate(fruitPreb[Random.Range(0,fruitPreb.Length)]);Rigidbody rb = fruitClone.GetComponent<Rigidbody>();rb.velocity = new Vector3(0,8.0f,0); //重力上的速度rb.angularVelocity = new Vector3(Random.Range(-5f,5f),0,Random.Range(-5f,5f)); //角度上的速度Vector3 pos = transform.position; //生成点的位置pos.x += Random.Range(-0.5f, 0.5f); //生成点附近随机的一个位置 fruitClone.transform.position = pos; //将随机位置赋给生成的水果yield return new WaitForSeconds(3f);}}// Update is called once per framevoid Update () {}
}
给生成点挂载脚本,给数组赋值
5、运行后可以看到在随机位置生成随机一种水果
三、切割水果
1、导入切割水果模型的包
2、编写脚本SwordCutter,并将其挂载到左右武士刀上
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class SwordCutter : MonoBehaviour {//切面材质public Material capMat;// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {}private void OnTriggerEnter(Collider other){}private void OnCollisionEnter(Collision collision){GameObject victim = collision.gameObject;//切割后返回的碎片GameObject[] pieces = BLINDED_AM_ME.MeshCut.Cut(victim,transform.position,transform.right,capMat);//第一个参数是原来的模型,第二个参数是切割后的模型,如果没有Rigidbody会悬浮在空中,所以添加Rigidbody和MeshCollider//由于模型会被二次切割,所以convex设置为trueif (!pieces[1].GetComponent<Rigidbody>()){pieces[1].AddComponent<Rigidbody>();pieces[1].AddComponent<MeshCollider>().convex = true;}//对切开的水果两部分进行延时销毁Destroy(pieces[0],5.0f);Destroy(pieces[1], 5.0f);}
}
3、添加水果切片的模型脚本,并设置先关属性
四、设置上升和下降过程中的水果不发生碰撞
1、在unity的物理系统当中,是可以控制不同层级上的物体的是否进行碰撞检测的,Edit-->Project Setting-->Physics,这里有个矩阵,横向和纵向代表了不同的图层,如果取消勾选的话说明该物体不参与碰撞,所以只需要将水果放在一个图层上面,在这里进行设置就可以了
2、选中水果,layer-->add layer-->fruit
3、返回场景,将水果添加进图层fruit
4、Edit-->Project Settings-->Physics,在矩阵中多了fruit这一图层,取消勾选该图层,这个图层上的所有内容都将不会发生碰撞,这样水果之间就不会发生自身的碰撞了
五、对不用的水果进行销毁
1、将销毁水果的脚本添加到水果之上
2、脚本内容
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Fruit : MonoBehaviour {// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {if (transform.position.y < -50f)Destroy(this.gameObject);}}
3、将脚本挂载到水果上
六、运行结果
注:1、为了保证切开后的水果与原来的模型缩放后的值保持一致,修改脚本MeshCut,在223行添加设置localScale值
2、遇到的问题,左右武士刀、水果都添加了Rigidbody和MeshCollider,并且勾选了convex,但是OnCollisionEnter方法没有调用
原因:不清楚,可能是Mesh Collider的大小不对,但是没有找到修改大小的方法
解决办法:去掉MeshCollider,添加boxcollider
水果忍者VR原型 二相关推荐
- Kinect SDK 正式版(二)骨骼追踪,实现PC版体感水果忍者
这篇来介绍一下几个正式版SDK提供的新特性,还有比较被主流应用的骨骼数据操作. 首先先介绍一个新特性,Kinect角度调整,继续上篇的项目工程,在界面上添加两个控件,一个下拉列表,一个按钮. < ...
- 2017级C语言大作业 - 水果忍者
水果忍者 C语言作业 分享17级同学大一上学期用C语言实现的水果忍者.分步骤代码.图片音乐素材.可执行程序可从百度网盘下载: 链接:https://pan.baidu.com/s/1i-e_MVChl ...
- L3-012 水果忍者 (30 分)-PAT 团体程序设计天梯赛 GPLT
2010年风靡全球的"水果忍者"游戏,想必大家肯定都玩过吧?(没玩过也没关系啦~)在游戏当中,画面里会随机地弹射出一系列的水果与炸弹,玩家尽可能砍掉所有的水果而避免砍中炸弹,就可以 ...
- 【CCCC】L3-012 水果忍者 (30分),,枚举斜率
problem L3-012 水果忍者 (30分) 2010年风靡全球的"水果忍者"游戏,想必大家肯定都玩过吧?(没玩过也没关系啦~)在游戏当中,画面里会随机地弹射出一系列的水果与 ...
- 水果忍者(数学 叉积)
水果忍者 题目 2010年风靡全球的"水果忍者"游戏,想必大家肯定都玩过吧?(没玩过也没关系啦~)在游戏当中,画面里会随机地弹射出一系列的水果与炸弹,玩家尽可能砍掉所有的水果而避免 ...
- 7-45 水果忍者 (30 point(s))
2010年风靡全球的"水果忍者"游戏,想必大家肯定都玩过吧?(没玩过也没关系啦~)在游戏当中,画面里会随机地弹射出一系列的水果与炸弹,玩家尽可能砍掉所有的水果而避免砍中炸弹,就可以 ...
- L3-012 水果忍者 (30 分)
2010年风靡全球的"水果忍者"游戏,想必大家肯定都玩过吧?(没玩过也没关系啦~)在游戏当中,画面里会随机地弹射出一系列的水果与炸弹,玩家尽可能砍掉所有的水果而避免砍中炸弹,就可以 ...
- L3-012 水果忍者
题目: 2010年风靡全球的"水果忍者"游戏,想必大家肯定都玩过吧?(没玩过也没关系啦~)在游戏当中,画面里会随机地弹射出一系列的水果与炸弹,玩家尽可能砍掉所有的水果而避免砍中炸弹 ...
- 用Python写了一个水果忍者小游戏
点击上方"菜学Python",选择"星标"公众号 超级无敌干货,第一时间送达!!! 水果忍者的玩法很简单,尽可能的切开抛出的水果就行. 今天小五就用python ...
最新文章
- overridePendingTransition 方法在Fragment 中使用
- 微软:Visual Studio2010能驱动世界
- 012_CSS相邻兄弟选择器
- jQuery学习笔记1--表格展开关系
- python函数体以冒号起始、并且是缩进格式的_Python基础第三课
- Ubuntu下载gitea
- Hibernate type 与java 和 数据库类型对应
- checkbox居中 editor_radio 或 CheckBox 关联 其他元素 整体选择
- python如何快速导入未安装模块_如何导入安装在sitepackages中的模块
- JS动态修改页面EasyUI datebox不生效、EasyUI动态添加Class、EasyUI动态渲染解析解决方案
- mysql的架构及查询sql的执行流程(二)
- 4线-2线优先编码器
- 新手初步--Springmvc
- 怼天怼地的马斯克道歉了?
- 支付网关潜藏黑客!32万多含CVV码的财务信息被盗
- 两个正数相乘或相加,为什么结果是负数。/Java基本数据类型介绍
- 有意思的shell命令行提示符
- ”微信小程序“一场风暴还是过江之鲫
- 服务器上Ubuntu系统的java依赖安装
- nvme分区选mbr还是guid_win10 双系统 Ubuntu UEFI+GPT bios+mbr 理论与实践