相機觀察某個物件

2021-08-28 07:06:48 字數 1746 閱讀 9388

在unity中做相機觀察某個物件的時候會經常用到這個功能,就是我可以上下左右任意角度觀察這個物件,那麼根據這個需求,咱們看需要哪些變數  1.觀察物件  2.相機位置  3.相機移動引數設定 ,閾值範圍等

///

/// 觀察物件

///

public transform target;

///

/// 橫向移動的速度

///

public float xspeed = 200;

public float yspeed = 200;

///

/// 拉近拉遠時的移動速度

///

public float mspeed = 10;

///

/// 上下觀察時的觀察範圍

///

public float yminlimit = -50;

public float ymaxlimit = 50;

///

/// 拉近拉遠時的相機範圍限制

///

public float distance = 2;

public float mindistance = 2;

public float maxdistance = 30;

///

/// 相機高度

///

public float camheight = 2;

///

/// 是否要緩動效果

///

public bool needdamping = true;

float damping = 5.0f;

///

/// 拖動時的速度偏移量

///

public float x = 0.0f;

public float y = 0.0f;

那麼剛開始的時候,咱們xu

需要先把相機當前的角度記錄下來

vector3 angles = transform.eulerangles;

x = angles.y;

y = angles.x;

然後等咱們按下滑鼠右鍵進行拖動時,咱們可以根據mou***和mousey來記錄pi偏移量,把這個偏移量儲存za在x和y中,這樣咱們可以得出乙個相機需要的旋轉角度

if (input.getmousebutton(1))

根據需求咱們可以得出,實際上就是保持相機和觀察物件之間的向量長度不變,讓這個向量繞咱們記錄的角度偏移量旋轉即可,所以接下來確定相機的位置

distance -= input.getaxis("mouse scrollwheel") * mspeed;

distance = mathf.clamp(distance, mindistance, maxdistance);

quaternion rotation = quaternion.euler(y, x, 0.0f);

vector3 disvector = new vector3(0.0f, 0, -distance);

vector3 position = rotation * disvector + new vector3(target.position.x,target.position.y+camheight,target.position.z);

最後加上是否需要緩動效果

if (needdamping)

else

transform.lookat(target);

}

NSInvocation直接呼叫某個物件的訊息

在 ios中可以直接呼叫某個物件的訊息方式有兩種 一種是performselector withobject 再一種就是nsinvocation。第一種方式比較簡單,能完成簡單的呼叫。但是對於 2個的引數或者有返回值的處理,那就需要做些額外工作才能搞定。那麼在這種情況下,我們就可以使用nsinvoc...

判斷物件陣列中是否含有某個物件。

var json1 var json2 function mergearr json1,json2 return keyarr console.log mergearr json1.addroledata,json2.addroledata 判斷的主要在於if json.stringify json...

iOS呼叫某個物件的方法

在 ios中可以直接呼叫某個物件的訊息方式有兩種 一種是performselector withobject 再一種就是nsinvocation。第一種方式比較簡單,能完成簡單的呼叫。但是對於 2個的引數或者有返回值的處理,那performselector withobject就顯得有點有心無力了,...