Unity3D技术需求

一、给所有子类添加mesh碰撞器

摘自 https://blog.csdn.net/weixin_43392473/article/details/90900965

当地形比较复杂,而我们想给每一个物体加mesh 碰撞器的时候,我们肯定不会一个一个添加的,那样又费时间又没效率,我们可以用编辑器来实现这一功能,首先,如果你Asset文件夹下创建一个Editor文件夹,如果有的话就算了,然后创建一个C#文件,编辑代码如下:

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

public class Tools : Editor
{
    [MenuItem(@"My_Tools/Selection/AddMeshCollider")]
    
    public static void AddComponents()
    {
        //transforms是Selection类的静态字段,其返回的是选中的对象的Transform的数组
        Transform[] transforms = Selection.transforms;

        for (int i = 0; i < transforms.Length; i++)
        {
            //这里即可打印你选中物体的名字
            //Debug.Log(transforms[i].name);
            FindChilds(transforms[i]);
        }
    }
    public static void FindChilds(Transform Obj)
    {
       
        int childNum = Obj.childCount;
        if (childNum == 0)
        {
            return;
        }
        else
        {
            for (int i = 0; i < childNum; i++)
            {
                if (Obj.GetChild(i).GetComponent<MeshRenderer>() != null)
                {

                    Obj.GetChild(i).gameObject.AddComponent<MeshCollider>();
                    FindChilds(Obj.GetChild(i));
                }
                else
                {

                    FindChilds(Obj.GetChild(i));

                }

            }
        }
    }
}

然后菜单栏就会出现在这里插入图片描述,我们选中我们要添加的父类,点击即可。

二、Unity3D场景漫游以及碰撞防止反弹

摘自 https://blog.51cto.com/myselfdream/1737528

这两天一直在做一个漫游的东西,漫游的代码,网上各种各样,都有,但是在漫游的过程中出现一个问题,那就是碰到墙壁之后会穿墙,或者是会反弹,摄像机一直在抖动,这样看起来很不爽,

漫游的程序就不多少了,有好多,我这用了两种:

1.采用滑动的偏移量来控制移动,这包括三种,

  第一一种是鼠标的Input.GetMouseButtonDown(0)和Input.GetMouseButton(0)计算偏移量;

  第二种就是使用虚拟轴

  float offetX = Input.GetAxis("Mouse X");//左右滑动

  float offetY = Input.GetAxis("Mouse Y");//上下滑动

  来控制移动和旋转;

  第三种,采用就是移动平台下的手指滑动,这个也有好多,也可以用

FingerGestures插件;
这个可以看一看宣雨松的博客,讲的很详细,http://www.xuanyusong.com/archives/1869

 也可以用Input.GetTouch(0)手指滑动;

总之一句话就是用的偏差量来控制移动和旋转;

2.防止摄像机穿墙:

相碰的两个物体都要添加Collider,运动的那个物体定要加刚体(给摄像机加一个Capsule子对象,将Collider和Rigidbody加载Capsule的父对象身上),但是防止穿墙就得靠Rigidbody组件的Constraints属性了,分别有Freeze Position(x,y,z)和Freeze Rotation(x,y,z);固定位置和角度,Freeze Rotation(x,y,z)勾上哪一个轴,碰撞之后不超哪一个轴旋转,Freeze Position(x,y,z)控制位置,防止穿墙,x和z轴不能勾,这样碰撞之后就不会穿墙。

3.防止碰撞反弹

这个也不是很难,就是想不到这个问题出在哪,你看了之后就会明白,其实作为刚体,gameObject运动之后,rigidbody.velocity的值是不为Vector(0,0,0),作为刚体,碰撞后本来就会反弹,因而会一直在动,朝着反弹的方向,所以很闹心,但是我们可以将rigidbody.velocity归0,没有速度了就不会反弹了,因为是物理特性的,所以不要写在Update中,

void FixedUpdate()

{

this.GetComponent<Rigidbody>().rigidbody.velocity = new Vector3(0, 0, 0);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值