unity-杂记

在unity开发过程中,会遇到很多问题,在这篇博客里记载我遇到的问题和解决方案~~

长期更新~~


Q1. 碰撞体与碰撞体之间忽略碰撞


问题描述:我在一辆小车上新加了一个碰撞体,由于车自带有碰撞体,两者发生碰撞导致小车严重抖动。发现把物体设为车的子物体也无法解决,后想到了忽略碰撞。
解决方案如下:

using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
public Transform bulletPrefab;
void Start() {
      Transform bullet = Instantiate(bulletPrefab) as Transform;      
      Physics.IgnoreCollision(bullet.GetComponent<Collider>(), GetComponent<Collider>());
    }
}

注意到两物体都有collider,用到的函数是Physics.IgnoreCollision


Q2. get和set方法解决对类的成员变量访问


问题描述:这类情况经常见到,包括我在看别人代码时不明白get和set用来干什么。怎么理解呢?
在类的定义中,通常定义了很多public 变量,还有很多private变量,对于成员函数来说,它们都是可以访问的,而对于非成员函数来说,private变量它是没有权限访问,当然,有时我们确实需要对这些private访问和操作。C++的解决办法是使用友元函数,C#和Java使用get和set方法,具体如下:

class Person
  {
        private char name;
        private int age;
        public char Name
        {
            get { return name; }
            set { name = value; }
        }
        public int Age
        {
            get { return age; }
            set { age = value; }
        }
  }

注意到定义的属性名Name和私有变量name不同名,非成员函数访问时直接访问Name变量即可(相当于自定义变量)

在定义的时候可以只定义一个get方法或只定义一个set方法。如果只定义get方法,那么这个相应变量就是“只读”的;如果只定义set方法,那么相应变量就是“只写”的。都有的话当然是可读可写,这样我们就可以控制对变量的读写操作。


Q3. 判断哪个平台并执行相应代码


问题描述:经常看到看到代码中有灰色部分,多以#if #else if #endif 开头,这些都是什么意思呢?
answer: 源文件在进行编译之前要进行一次文件处理,这是由预处理器完成的。这种文件处理只对源文件进行文本处理而不进行任何编译动作。所有预处理指令都以“#”符号开头。
最常见的如下

#if UNITY_ANDROID
        Debug.Log("这里是安卓设备^_^");
    #endif

    #if UNITY_IPHONE
        Debug.Log("这里是苹果设备>_<");
    #endif

    #if UNITY_STANDALONE_WIN
        Debug.Log("我是从Windows的电脑上运行的T_T");
    #endif        

区分是安卓、apple、还是pc,并分别执行相应代码

还有:

#region Events

    public Action OnGraphicalUpdate = () => { };
    public Action OnPrePhysicalUpdate = () => { };
    public Action OnPostPhysicalUpdate = () => { };

    #endregion

#region一个分块预处理命令,它主要用于编辑代码的分段,在编译时会被自动删除。它必须以#endregion结束。 #region块不能与#if块重叠。但是,可以将#region块嵌套在#if块内,或将#if块嵌套在#region块内。#region 后面的Events是来描述这段代码是用来干什么的。使用这个命令会使你的代码看上去干净很多。


#Q4.

猜你喜欢

转载自blog.csdn.net/scopperil/article/details/80621965