zoukankan      html  css  js  c++  java
  • Unity3D笔记十五 碰撞、移动

    碰撞 

    Collision. [kəˈliʒən] 碰撞;冲突;(意见,看法)的抵触;(政党等的)倾轧

    选择一个需要添加碰撞器的游戏对象后

    Component->Physics-

    Unity一共为对象提供了6

    种碰撞器,分别是Box Collider[kəˈlaidə](盒子碰撞器)、Sphere Collider[ˈkæpsju:l](球体碰撞器)、Capsule Collider

    (胶囊碰撞器)、Mesh Collider(网格碰撞器)和Wheel Collider(车轮碰撞器)还有一个Terrain Collider

    Collider[kəˈlaidə] 相撞;碰撞;冲突;抵触

    物理材质

    1Assets- Import Package-Physic Materials

    标准资源包中提供了5种常用的物理材质:

      1、弹性材质(Bouncy)[ˈbaunsi] adj.快活的;精神的;有弹性的;自大的

      2、冰材质(Ice)

      3、金属材质(Metal)[ˈmetl] n.金属;金属元素;成色;金色

      4、橡胶材质(Rubber)[ˈrʌbə] adj.橡胶制成的

      5、木头材质(Wood)。

    2、除了可以使用Unity标准资源包中的5款物理材质,也可以自行创建物理材质。创建新物理材质的方法如下,在Project视图中点击“Create”→“Physic Material”菜单项即可

    using UnityEngine;
    using System.Collections;
    
    public class _6_3 : MonoBehaviour
    {
        /// <summary>
        /// 角色控制器对象
        /// </summary>
        private CharacterController controller = null;
    
        /// <summary>
        /// 角色移动的速度
        /// </summary>
        private float moveSpeed = 30.0f;
    
        /// <summary>
        ///角色旋转的速度
        /// </summary>
        private float rotateSpeed = 3.0f;
    
    
        ////碰撞的游戏对象
        private GameObject colliderObj = null;
        // Use this for initialization
        void Start()
        {
            //获取角色控制器对象
            controller = GetComponent<CharacterController>();
        }
    
        private void OnGUI()
        {
            //控制角色旋转
            if (GUILayout.RepeatButton("向左旋转"))
            {
                transform.Rotate(0, -rotateSpeed, 0);
            }
            if (GUILayout.RepeatButton("向右旋转"))
            {
                transform.Rotate(0, rotateSpeed, 0);
            }
    
            #region 移动
            //SimpleMove() 只适用于平面中的移动 2 Move()方法适用于所有方向的移动,所以它可以实现游戏对象任意角度的飞行与移动效果。
            //在开发中,尽量使用Move()方法来控制角色移动,因为它完全可以取代SimpleMove()方法,并且使用它移动角色更为灵活 
            #endregion
            //控制角色移动  ×必须添加了角色控制器才有效  选择游戏对象Component-Physics-Character Controller
            #region 移动
            if (GUILayout.RepeatButton("向前移动"))
            {
                controller.SimpleMove(Vector3.forward * moveSpeed);//其参数为角色移动的方向,只支持x轴与z轴方向的移动
            }
            if (GUILayout.RepeatButton("向后移动"))
            {
                controller.SimpleMove(Vector3.back * moveSpeed);
            }
            if (GUILayout.RepeatButton("向左移动"))
            {
                controller.SimpleMove(Vector3.left * moveSpeed);
            }
            if (GUILayout.RepeatButton("向右移动"))
            {
                controller.SimpleMove(Vector3.right * moveSpeed);
            }
            if (GUILayout.RepeatButton("Move向右移动-飞了"))
            {
                controller.Move(Vector3.right * moveSpeed);
            } 
            #endregion
    
            #region 飞行
            //可以使用transform.TransformDirection()方法得到当前主角移动时面朝的方向
            if (GUILayout.RepeatButton("起飞"))
            {
                transform.Translate(0, 1, 0);
            }
            if (GUILayout.RepeatButton("降落"))
            {
                transform.Translate(0, -1, 0);
            }
            #endregion
    
            if (controller.collisionFlags == CollisionFlags.Sides)
            {
                if (controller)
                {
                    if (colliderObj != null)
                    {
                        GUI.color = Color.yellow;
                        GUI.Label(new Rect(200, 100, 200, 100), "碰撞游戏的对象为:" + colliderObj.name);
                    } 
                }
            }
        }
    
        #region 碰撞检测 
        //角色控制器可感应游戏对象之间的碰撞,检测它们碰撞时,需要调用父类方法OnControllerColliderHit()
        void OnControllerColliderHit(ControllerColliderHit hit)
        {
            //得到碰撞的游戏对象
            colliderObj = hit.gameObject;//使用hit.gameObject引用,即可获取角色控制器组件碰撞后的游戏对象
        } 
        #endregion
    
        // Update is called once per frame
        void Update()
        {
    
        }
    }


    作者:PEPE
    出处:http://pepe.cnblogs.com/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    -for循环案例(下)
    for循环案例(上)
    for循环
    判断语句案例
    判断语句
    操作符优先级
    windows 下安装图片标注软件 labelling和出错解决
    tf-faster rcnn
    目标检测——Faster R-CNN 详解、Pytorch搭建、训练自己的数据集
    java idea 配置安装
  • 原文地址:https://www.cnblogs.com/PEPE/p/3530602.html
Copyright © 2011-2022 走看看