unityunity3d transformm.lossyscale怎么修改

程序写累了,就来玩玩酷跑小游戏吧,嘿嘿。
雨松MOMO送你一首歌曲,嘿嘿。
Unity3D研究院之运行时修改粒子特效镜像以及缩放(八十)
Unity3D研究院之运行时修改粒子特效镜像以及缩放(八十)
围观34178次
编辑日期: 字体:
刚好这几天有朋友问我,我也刚好整理一下。
1.先说非运行时,AssetStore有一个叫Particle Scaler的插件,非常好用。但是很遗憾它运行时不能用。
2.再说运行时,就是让transform的scale可以控制粒子的缩放,如果设置-1就是粒子镜像。
首先,把unity的shader下载下来。 找到所有Particle开头的shader,也就是粒子特效用的。
下面我随便改一个shader,其他的shader修改方法原理一样。 注:shader 中 ”//—Add—“ 就是我修改的内容
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
Shader "Particles/Additive" {Properties { _TintColor ("Tint Color", Color) = (0.5,0.5,0.5,0.5) _MainTex ("Particle Texture", 2D) = "white" {} _InvFade ("Soft Particles Factor", Range(0.01,3.0)) = 1.0 //----------------------add------------------------------ _Position ("Position", Vector) = (0,0,0,0) _Scale ("Scale", Vector) = (1,1,1,1) //----------------------add------------------------------ }&Category { Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" } Blend SrcAlpha One AlphaTest Greater .01 ColorMask RGB Cull Off Lighting Off ZWrite Off Fog { Color (0,0,0,0) }
SubShader {
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_particles&
#include "UnityCG.cginc"&
sampler2D _MainTex;
fixed4 _TintColor;
struct appdata_t {
float4 vertex : POSITION;
fixed4 color : COLOR;
float2 texcoord : TEXCOORD0;
struct v2f {
float4 vertex : SV_POSITION;
fixed4 color : COLOR;
float2 texcoord : TEXCOORD0;
#ifdef SOFTPARTICLES_ON
float4 projPos : TEXCOORD1;
float4 _MainTex_ST;
//----------------------add------------------------------
float4 _Position;
float4 _Scale;
//----------------------add------------------------------
v2f vert (appdata_t v)
//----------------------add------------------------------
float4 objV = mul(UNITY_MATRIX_MV, v.vertex);
objV.xyz -= _Position;
objV.xyz = float3(_Scale.x * objV.x, _Scale.y * objV.y, _Scale.z * objV.z);
objV.xyz += _Position;
o.vertex = mul(UNITY_MATRIX_P, objV);
//----------------------add------------------------------
//o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
#ifdef SOFTPARTICLES_ON
o.projPos = ComputeScreenPos (o.vertex);
COMPUTE_EYEDEPTH(o.projPos.z);
o.color = v.color;
o.texcoord = TRANSFORM_TEX(v.texcoord,_MainTex);
sampler2D_float _CameraDepthTexture;
float _InvFade;&
fixed4 frag (v2f i) : SV_Target
#ifdef SOFTPARTICLES_ON
float sceneZ = LinearEyeDepth (SAMPLE_DEPTH_TEXTURE_PROJ(_CameraDepthTexture, UNITY_PROJ_COORD(i.projPos)));
float partZ = i.projPos.z;
float fade = saturate (_InvFade * (sceneZ-partZ));
i.color.a *= fade;
return 2.0f * i.color * _TintColor * tex2D(_MainTex, i.texcoord);
接着给需要缩放或者镜像的粒子挂上这一条脚本。利用OnWillRenderObject方法,将粒子的缩放以及坐标传进shader中去。
using UnityEngine;using System.Collections;&public class ParticleScaler : MonoBehaviour { void OnWillRenderObject(){
renderer.material.SetVector("_Position",Camera.current.worldToCameraMatrix.MultiplyPoint(transform.root.position));
renderer.material.SetVector("_Scale",transform.lossyScale); }}
OK.这样粒子就完成了镜像。。 编辑器中快改一改transform的scale的值看看效果吧。
工程代码:
如果你还有更好的办法来做粒子镜像或者旋转,欢迎在下面留言。谢谢~祝大家学习愉快~
感谢楼下好友的补充。
如果特效层级多,旋转嵌套复杂,如果只用lossyScale是不正确的。应该保持特效层级中的scale为1,1,1然后修改以上脚本:GetComponent().material.SetVector(“_Scale”, new Vector3(transform.localScale.x * (transform.lossyScale.x & 0 ? -1.0f : 1.0f), transform.localScale.y * (transform.lossyScale.y & 0 ? -1.0f : 1.0f), transform.localScale.z * (transform.lossyScale.z & 0 ? -1.0f : 1.0f)));
本文固定链接:
转载请注明:
雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。
您可能还会对这些文章感兴趣!6040人阅读
unity3d(154)
移动GameObject是非常平常的一件事情,一下代码看起来很简单:
transform.localPosition += new Vector3 ( 10.0f * Time.deltaTime, 0.0f, 0.0f );
但是小心了,假设上面这个GameObject有一个parent, 并且这个parent GameObject的localScale是(2.0f,2.0f,2.0f)。你的GameObject将会移动20.0个单位/秒。因为该 GameObject的world position等于:
Vector3 offset = new Vector3( my.localPosition.x * parent.lossyScale.x,
my.localPosition.y * parent.lossyScale.y,
my.localPosition.z * parent.lossyScale.z );
Vector3 worldPosition = parent.position + parent.rotation *
换句话说,上面这种直接操作localPosition的方式是在没有考虑scale计算的时候进行的,为了解决这个问题,Unity3D提供了Translate函数,所以正确的做法应该是:
transform.Translate ( 10.0f * Time.deltaTime, 0.0f, 0.0f );
曝出在Inspector的变量同样的也能被Animation View Editor所使用
有时候我们会想用Unity3D自带的Animation View Editor来做一些简单的动画操作。而Animation Editor不仅可以操作Unity3D自身的component,还可以操作我们自定义的MonoBehavior中的各个Property。所以加入 你有个float值需要用曲线操作,你可以简单的将它曝出到成可以serialize的类型,如:
public float foobar = 1.0f;
这样,这个变量不仅会在Inspector中出现,还可以在animation view中进行操作,生成AnimationClip供我们通过AnimationComponent调用。
public class TestCurve : MonoBehaviour {
public float foobar = 0.0f;
IEnumerator Start () {
yield return new WaitForSeconds (2.0f);
animation.Play(“foobar_op”);
InvokeRepeating ( “LogFoobar”, 0.0f, 0.2f );
yield return new WaitForSeconds (animation[&foobar_op&].length);
CancelInvoke (“LogFoobar”);
void LogFoobar () {
Debug.Log(“foobar = ” + foobar);
GetComopnent&T& 可以取父类类型
Unity3D 允许我们对MonoBehavior做派生,所以你可能有以下代码:
public class foo : MonoBehaviour {
public class bar : foo {
假设我们现在有A,B两个GameObject, A包含foo, B包含bar, 当我们写
foo comp1 = A.GetComponent&foo&();
bar comp2 = B.GetComponent&bar&();
可以看到comp1, comp2都得到了应得的Component。那如果我们对B的操作改成:
foo comp2 = B.GetComponent&foo&();
答案是comp2还是会返回bar Component并且转换为foo类型。你同样可以用向下转换得到有效变量:
bar comp2_bar = comp2
合理利用GetComponent&base_type&()可以让我们设计Component的时候耦合性更低。
Invoke, yield 等函数会受 Time.timeScale 影响
Unity3D提供了一个十分方便的调节时间的函数Time.timeScale。对于初次使用Unity3D的使用者,会误导性的认为Time.timeScale同样可以适用于游戏中的暂停(Pause)和开始(Resume)。所以很多人有习惯写:
Time.timeScale = 0.0f
对于游戏的暂停/开始,是游戏系统设计的一部分,而Time.timeScale不不是用于这个部分的操作。正确的做法应该是搜集需要暂停的脚本或 GameObject,通过设置他们的enabled = false 来停止他们的脚本活动或者通过特定函数来设置这些物件暂停时需要关闭那些操作。
Time.timeScale 更多的是用于游戏中慢镜头的播放等操作,在服务器端主导的游戏中更应该避免此类操作。值得一提的是,Unity3D的许多时间相关的函数都和 timeScale挂钩,而timeScale = 0.0f将使这些函数或动画处于完全停止的状态,这也是为什么它不适合做暂停操作的主要原因。
这里列出受timeScale影响的一些主要函数和Component:
MonoBehaviour.Invoke(…)
MonoBehaviour.InvokeRepeating(…)
yield WaitForSeconds(…)
GameObject.Destroy(…)
Animation Component
Time.time, Time.deltaTime
Coroutine 和 IEnumerator的关系
初写Unity3D C#脚本的时候,我们经常会犯的错误是调用Coroutine函数忘记使用StartCoroutine的方式。如:
TestCoroutine.cs
IEnumerator CoLog () {
yield return new WaitForSeconds (2.0f);
Debug.Log(“hello foobar”);
当我们用以下代码去调用上述函数:
TestCoroutine testCo = GetComponent&TestCoroutine&();
testCo.CoLog ();
testCo.StartCoroutine ( “CoLog” );
那么testCo.CoLog()的调用将不会起任何作用。
StartCoroutine, InvokeRepeating 和其调用者关联
通常我们只在一份GameObject中去调用StartCoroutine或者InvokeRepeating, 我们写:
StartCoroutine ( Foobar() );
InvokeRepeating ( “Foobar”, 0.0f, 0.1f );
所以如果这个GameObject被disable或者destroy了,这些coroutine和invokes将会被取消。就好比我们手动调用:
StopAllCoroutines ();
CancelInvoke ();
这看上去很美妙,对于AI来说,这就像告诉一个NPC你已经死了,你自己的那些小动作就都听下来吧。
但是注意了,假如这样的代码用在了一个Manager类型的控制AI上,他有可能去控制其他的AI, 也有可能通过Invoke, Coroutine去做一些微线程的操作,这个时候就要明确StartCoroutine或者InvokeRepeating的调用者的设计。讨论之前我 们先要理解,StartCoroutine或InvokeRepeating的调用会在该MonoBehavior中开启一份Thread State, 并将需要操作的函数,变量以及计时器放入这份Stack中通过并在引擎每帧Update的最后,Renderer渲染之前统一做处理。所以如果这个
MonoBehavior被Destroy了,那么这份Thread State也就随之消失,那么所有他存储的调用也就失效了。
如果有两份GameObject A和B, 他们互相知道对方,假如A中通过StartCoroutine或InvokeRepeating去调用B的函数从而控制B,这个时候Thread State是存放在A里,当A被disable或者destroy了,这些可能需要一段时间的控制函数也就失效了,这个时候B明明还没死,也不会动了。更 好的做法是让在A的函数中通过B.StartCoroutine ( … ) 让这份Thread State存放于B中。
// class TestCortouine
public class TestCoroutine : MonoBehaviour {
public IEnumerator CoLog ( string _name ) {
Debug.Log(_name + ” hello foobar 01″);
yield return new WaitForSeconds (2.0f);
Debug.Log(_name + ” hello foobar 02″);
// component attached on GameObject A
public class A: MonoBehaviour {
public GameObject B;
void Start () {
TestCoroutine compB = B.GetComponent&TestCoroutine&();
// GOOD, thread state in B
// same as: compB.StartCoroutine ( “CoLog”, “B” );
compB.StartCoroutine ( compB.CoLog(“B”) );
// BAD, thread state in A
StartCoroutine ( compB.CoLog(“A”) );
Debug.Log(“Bye bye A, we’ll miss you”);
Destroy(gameObject); // T_T I don’t want to die…
以上代码,得到的结果将会是:
B hello foobar 01
A hello foobar 01
Bye bye A, we’ll miss you
B hello foobar 02
如不需要Start, Update, LateUpdate函数,请去掉他们
当你的脚本里没有任何Start, Update, LateUpdate函数的时候,Unity3D将不会将它们加入到他的Update List中,有利于脚本整体效率的提升。
我们可以从这两个脚本中看到区别:
Update_01.cs
public class Update_01 : MonoBehaviour {
void Start () {}
void Update () {}
Update_02.cs
public class Update_02 : MonoBehaviour {
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:331491次
积分:3933
积分:3933
排名:第7921名
转载:311篇
评论:38条
(3)(1)(1)(2)(6)(2)(2)(10)(13)(1)(6)(2)(1)(1)(6)(14)(41)(5)(5)(2)(5)(6)(14)(9)(4)(9)(5)(13)(1)(7)(6)(16)(17)(47)(8)(6)(8)(15)(2)2025人阅读
unity(33)
Transform这个类继承自Component, IEnumerable。我们在开发的过程中之所以可以对Transform进行foreach,就是因为它实现了IEnumerable抽象方法GetEnumerator,该方法返回一个IEnumerator,而通过重写了IEnumerator中的Current,可以依次获得子对象。废话不多说了
using System.C
using pilerS
using UnityEngine.I
namespace UnityEngine
&&&&public
class Transform : Component, IEnumerable
&&&&&&&&private
sealed class Enumerator : IEnumerator
&&&&&&&&&&&&private T
&&&&&&&&&&&&private
int currentIndex = -1;
&&&&&&&&&&&&public
object Current
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&get
&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&return
this.outer.GetChild(this.currentIndex);
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}
&&&&&&&&&&&&internal
Enumerator(Transform outer)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&this.outer =
&&&&&&&&&&&&}
&&&&&&&&&&&&public
bool MoveNext()
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&int childCount =this.outer.childC
&&&&&&&&&&&&&&&&return ++this.currentIndex & childC
&&&&&&&&&&&&}
&&&&&&&&&&&&public
void Reset()
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&this.currentIndex = -1;
&&&&&&&&&&&&}
&&&&&&&&public Vector3 position
&&&&&&&&&&&&get
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&Vector3
&&&&&&&&&&&&&&&&this.INTERNAL_get_position(out result);
&&&&&&&&&&&&&&&&return
&&&&&&&&&&&&}
&&&&&&&&&&&&set
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&this.INTERNAL_set_position(refvalue);
&&&&&&&&&&&&}
&&&&&&&&public Vector3 localPosition
&&&&&&&&&&&&get
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&Vector3
&&&&&&&&&&&&&&&&this.INTERNAL_get_localPosition(out result);
&&&&&&&&&&&&&&&&return
&&&&&&&&&&&&}
&&&&&&&&&&&&set
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&this.INTERNAL_set_localPosition(refvalue);
&&&&&&&&&&&&}
&&&&&&&&public Vector3 eulerAngles
&&&&&&&&&&&&get
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&return
this.rotation.eulerA
&&&&&&&&&&&&}
&&&&&&&&&&&&set
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&this.rotation = Quaternion.Euler(value);
&&&&&&&&&&&&}
&&&&&&&&public Vector3 localEulerAngles
&&&&&&&&&&&&get
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&Vector3
&&&&&&&&&&&&&&&&this.INTERNAL_get_localEulerAngles(out result);
&&&&&&&&&&&&&&&&return
&&&&&&&&&&&&}
&&&&&&&&&&&&set
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&this.INTERNAL_set_localEulerAngles(refvalue);
&&&&&&&&&&&&}
&&&&&&&&public Vector3 right
&&&&&&&&&&&&get
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&return
this.rotation * Vector3.
&&&&&&&&&&&&}
&&&&&&&&&&&&set
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&this.rotation = Quaternion.FromToRotation(Vector3.right,value);
&&&&&&&&&&&&}
&&&&&&&&public Vector3 up
&&&&&&&&&&&&get
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&return
this.rotation * Vector3.
&&&&&&&&&&&&}
&&&&&&&&&&&&set
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&this.rotation = Quaternion.FromToRotation(Vector3.up,value);
&&&&&&&&&&&&}
&&&&&&&&public Vector3 forward
&&&&&&&&&&&&get
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&return
this.rotation * Vector3.
&&&&&&&&&&&&}
&&&&&&&&&&&&set
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&this.rotation = Quaternion.LookRotation(value);
&&&&&&&&&&&&}
&&&&&&&&public Quaternion rotation
&&&&&&&&&&&&get
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&Q
&&&&&&&&&&&&&&&&this.INTERNAL_get_rotation(out result);
&&&&&&&&&&&&&&&&return
&&&&&&&&&&&&}
&&&&&&&&&&&&set
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&this.INTERNAL_set_rotation(refvalue);
&&&&&&&&&&&&}
&&&&&&&&public Quaternion localRotation
&&&&&&&&&&&&get
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&Q
&&&&&&&&&&&&&&&&this.INTERNAL_get_localRotation(out result);
&&&&&&&&&&&&&&&&return
&&&&&&&&&&&&}
&&&&&&&&&&&&set
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&this.INTERNAL_set_localRotation(refvalue);
&&&&&&&&&&&&}
&&&&&&&&public Vector3 localScale
&&&&&&&&&&&&get
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&Vector3
&&&&&&&&&&&&&&&&this.INTERNAL_get_localScale(out result);
&&&&&&&&&&&&&&&&return
&&&&&&&&&&&&}
&&&&&&&&&&&&set
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&this.INTERNAL_set_localScale(refvalue);
&&&&&&&&&&&&}
&&&&&&&&public Transform parent
&&&&&&&&&&&&get
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&return
this.parentI
&&&&&&&&&&&&}
&&&&&&&&&&&&set
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&if (thisis RectTransform)
&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&Debug.LogWarning(&Parent of RectTransform is being set with parent property. Consider using the SetParent method instead, with the worldPositionStays argument
set to false. This will retain local orientation and scale rather than world orientation and scale, which can prevent common UI scaling issues.&,this);
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&this.parentInternal =
&&&&&&&&&&&&}
&&&&&&&&internal
extern Transform parentInternal
&&&&&&&&&&&&[WrapperlessIcall]
&&&&&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&&&&&get;
&&&&&&&&&&&&[WrapperlessIcall]
&&&&&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&&&&&set;
&&&&&&&&public Matrix4x4 worldToLocalMatrix
&&&&&&&&&&&&get
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&Matrix4x4
&&&&&&&&&&&&&&&&this.INTERNAL_get_worldToLocalMatrix(out result);
&&&&&&&&&&&&&&&&return
&&&&&&&&&&&&}
&&&&&&&&public Matrix4x4 localToWorldMatrix
&&&&&&&&&&&&get
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&Matrix4x4
&&&&&&&&&&&&&&&&this.INTERNAL_get_localToWorldMatrix(out result);
&&&&&&&&&&&&&&&&return
&&&&&&&&&&&&}
&&&&&&&&public
extern Transform root
&&&&&&&&&&&&[WrapperlessIcall]
&&&&&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&&&&&get;
&&&&&&&&public
extern int childCount
&&&&&&&&&&&&[WrapperlessIcall]
&&&&&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&&&&&get;
&&&&&&&&public Vector3 lossyScale
&&&&&&&&&&&&get
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&Vector3
&&&&&&&&&&&&&&&&this.INTERNAL_get_lossyScale(out result);
&&&&&&&&&&&&&&&&return
&&&&&&&&&&&&}
&&&&&&&&public
extern bool hasChanged
&&&&&&&&&&&&[WrapperlessIcall]
&&&&&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&&&&&get;
&&&&&&&&&&&&[WrapperlessIcall]
&&&&&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&&&&&set;
&&&&&&&&protected
Transform()
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&private
extern void
INTERNAL_get_position(out Vector3value);
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&private
extern void
INTERNAL_set_position(ref Vector3value);
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&private
extern void
INTERNAL_get_localPosition(out Vector3value);
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&private
extern void
INTERNAL_set_localPosition(ref Vector3value);
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&private
extern void
INTERNAL_get_localEulerAngles(out Vector3value);
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&private
extern void
INTERNAL_set_localEulerAngles(ref Vector3value);
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&private
extern void
INTERNAL_get_rotation(out Quaternionvalue);
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&private
extern void
INTERNAL_set_rotation(ref Quaternionvalue);
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&private
extern void
INTERNAL_get_localRotation(out Quaternionvalue);
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&private
extern void
INTERNAL_set_localRotation(ref Quaternionvalue);
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&private
extern void
INTERNAL_get_localScale(out Vector3value);
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&private
extern void
INTERNAL_set_localScale(ref Vector3value);
&&&&&&&&public
void SetParent(Transform parent)
&&&&&&&&&&&&this.SetParent(parent,true);
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&public
extern void
SetParent(Transform parent, bool worldPositionStays);
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&private
extern void
INTERNAL_get_worldToLocalMatrix(out Matrix4x4value);
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&private
extern void
INTERNAL_get_localToWorldMatrix(out Matrix4x4value);
&&&&&&&&[ExcludeFromDocs]
&&&&&&&&public
void Translate(Vector3 translation)
&&&&&&&&&&&&Space relativeTo = Space.S
&&&&&&&&&&&&this.Translate(translation, relativeTo);
//更新位置,如果传入得是世界坐标,则直接在原基础上增加,否则表示传入是一个该物体的方向上位移
&&&&&&&&public
void Translate(Vector3 translation, [DefaultValue(&Space.Self&)] Space relativeTo)
&&&&&&&&&&&&if (relativeTo == Space.World)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&this.position +=
&&&&&&&&&&&&}
&&&&&&&&&&&&else
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&this.position +=
this.TransformDirection(translation);
&&&&&&&&&&&&}
//默认传入值为当前物体的坐标系上的位移
&&&&&&&&[ExcludeFromDocs]
&&&&&&&&public
void Translate(float x,float y,
&&&&&&&&&&&&Space relativeTo = Space.S
&&&&&&&&&&&&this.Translate(x, y, z, relativeTo);
//更新位置,如果传入得是世界坐标,则直接在原基础上增加,否则表示传入是一个该物体的方向上位移
&&&&&&&&public
void Translate(float x,float y,
float z, [DefaultValue(&Space.Self&)] Space relativeTo)
&&&&&&&&&&&&this.Translate(newVector3(x, y, z), relativeTo);
//更新位置,如果传入relativeTo为空表示是世界坐标,则直接在原基础上增加,否则表示传入是一个该物体的方向上位移
&&&&&&&&public
void Translate(Vector3 translation, Transform relativeTo)
&&&&&&&&&&&&if (relativeTo)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&this.position += relativeTo.TransformDirection(translation);
&&&&&&&&&&&&}
&&&&&&&&&&&&else
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&this.position +=
&&&&&&&&&&&&}
&&&&&&&&public
void Translate(float x,float y,
float z, Transform relativeTo)
&&&&&&&&&&&&this.Translate(newVector3(x, y, z), relativeTo);
//默认该物体的坐标系中旋转
&&&&&&&&[ExcludeFromDocs]
&&&&&&&&public
void Rotate(Vector3 eulerAngles)
&&&&&&&&&&&&Space relativeTo = Space.S
&&&&&&&&&&&&this.Rotate(eulerAngles, relativeTo);
//旋转,从这个方法我们可以看出来,unity的欧拉角旋转并非真正的欧拉角旋转,而是同样是四元数的方式
&&&&&&&&public
void Rotate(Vector3 eulerAngles, [DefaultValue(&Space.Self&)] Space relativeTo)
&&&&&&&&{//相对于父节点的旋转
&&&&&&&&&&&&Quaternion rhs = Quaternion.Euler(eulerAngles.x, eulerAngles.y, eulerAngles.z);
&&&&&&&&&&&&if (relativeTo == Space.Self)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&this.localRotation *=
&&&&&&&&&&&&}
&&&&&&&&&&&&else
&&&&&&&&&&&&{ //世界空间的旋转
&&&&&&&&&&&&&&&&this.rotation *= Quaternion.Inverse(this.rotation) * rhs *this.
&&&&&&&&&&&&}
//默认相对父节点旋转
&&&&&&&&[ExcludeFromDocs]
&&&&&&&&public
void Rotate(float xAngle,float yAngle,
float zAngle)
&&&&&&&&&&&&Space relativeTo = Space.S
&&&&&&&&&&&&this.Rotate(xAngle, yAngle, zAngle, relativeTo);
&&&&&&&&public
void Rotate(float xAngle,float yAngle,
float zAngle, [DefaultValue(&Space.Self&)] Space relativeTo)
&&&&&&&&&&&&this.Rotate(newVector3(xAngle, yAngle, zAngle), relativeTo);
&&&&&&&&internal
void RotateAroundInternal(Vector3 axis,float angle)
&&&&&&&&&&&&Transform.INTERNAL_CALL_RotateAroundInternal(this,ref axis, angle);
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&private
static extern
void INTERNAL_CALL_RotateAroundInternal(Transform self,ref Vector3 axis,
float angle);
//绕着axis这跟轴旋转angle角度,非弧度制
&&&&&&&&[ExcludeFromDocs]
&&&&&&&&public
void Rotate(Vector3 axis,float angle)
&&&&&&&&&&&&Space relativeTo = Space.S
&&&&&&&&&&&&this.Rotate(axis, angle, relativeTo);
//绕着axis这跟轴旋转angle角度,非弧度制
&&&&&&&&public
void Rotate(Vector3 axis,float angle, [DefaultValue(&Space.Self&)]
Space relativeTo)
&&&&&&&&&&&&if (relativeTo == Space.Self)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&this.RotateAroundInternal(base.transform.TransformDirection(axis),
angle * 0.f);
&&&&&&&&&&&&}
&&&&&&&&&&&&else
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&this.RotateAroundInternal(axis, angle *0.f);
&&&&&&&&&&&&}
//在point处建立坐标系,方向向量为axis,绕着这跟轴旋转angle角度,非弧度制
&&&&&&&&public
void RotateAround(Vector3 point, Vector3 axis,float angle)
&&&&&&&&&&&&Vector3 vector = this.
&&&&&&&&&&&&Quaternion rotation = Quaternion.AngleAxis(angle, axis);
&&&&&&&&&&&&Vector3 vector2 = vector -
&&&&&&&&&&&&vector2 = rotation * vector2;
&&&&&&&&&&&&vector = point + vector2;
&&&&&&&&&&&&this.position =
&&&&&&&&&&&&this.RotateAroundInternal(axis, angle *0.f);
&&&&&&&&[ExcludeFromDocs]
&&&&&&&&public
void LookAt(Transform target)
&&&&&&&&&&&&Vector3 up = Vector3.
&&&&&&&&&&&&this.LookAt(target, up);
&&&&&&&&public
void LookAt(Transform target, [DefaultValue(&Vector3.up&)] Vector3 worldUp)
&&&&&&&&&&&&if (target)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&this.LookAt(target.position, worldUp);
&&&&&&&&&&&&}
&&&&&&&&public
void LookAt(Vector3 worldPosition, [DefaultValue(&Vector3.up&)] Vector3 worldUp)
&&&&&&&&&&&&Transform.INTERNAL_CALL_LookAt(this,ref worldPosition,
ref worldUp);
&&&&&&&&[ExcludeFromDocs]
&&&&&&&&public
void LookAt(Vector3 worldPosition)
&&&&&&&&&&&&Vector3 up = Vector3.
&&&&&&&&&&&&Transform.INTERNAL_CALL_LookAt(this,ref worldPosition,
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&private
static extern
void INTERNAL_CALL_LookAt(Transform self,ref Vector3 worldPosition,
ref Vector3 worldUp);
&&&&&&&&public Vector3
TransformDirection(Vector3 direction)
&&&&&&&&&&&&return Transform.INTERNAL_CALL_TransformDirection(this,ref direction);
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&private
static extern Vector3
INTERNAL_CALL_TransformDirection(Transform self,
ref Vector3 direction);
&&&&&&&&public Vector3
TransformDirection(float x,float y,
&&&&&&&&&&&&return
this.TransformDirection(newVector3(x, y, z));
&&&&&&&&public Vector3
InverseTransformDirection(Vector3 direction)
&&&&&&&&&&&&return Transform.INTERNAL_CALL_InverseTransformDirection(this,ref direction);
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&private
static extern Vector3
INTERNAL_CALL_InverseTransformDirection(Transform self,
ref Vector3 direction);
&&&&&&&&public Vector3
InverseTransformDirection(float x,float y,
&&&&&&&&&&&&return
this.InverseTransformDirection(newVector3(x, y, z));
&&&&&&&&public Vector3
TransformVector(Vector3 vector)
&&&&&&&&&&&&return Transform.INTERNAL_CALL_TransformVector(this,ref vector);
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&private
static extern Vector3
INTERNAL_CALL_TransformVector(Transform self,
ref Vector3 vector);
&&&&&&&&public Vector3
TransformVector(float x,float y,
&&&&&&&&&&&&return
this.TransformVector(newVector3(x, y, z));
&&&&&&&&public Vector3
InverseTransformVector(Vector3 vector)
&&&&&&&&&&&&return Transform.INTERNAL_CALL_InverseTransformVector(this,ref vector);
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&private
static extern Vector3
INTERNAL_CALL_InverseTransformVector(Transform self,
ref Vector3 vector);
&&&&&&&&public Vector3
InverseTransformVector(float x,float y,
&&&&&&&&&&&&return
this.InverseTransformVector(newVector3(x, y, z));
&&&&&&&&public Vector3
TransformPoint(Vector3 position)
&&&&&&&&&&&&return Transform.INTERNAL_CALL_TransformPoint(this,ref position);
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&private
static extern Vector3
INTERNAL_CALL_TransformPoint(Transform self,
ref Vector3 position);
&&&&&&&&public Vector3
TransformPoint(float x,float y,
&&&&&&&&&&&&return
this.TransformPoint(newVector3(x, y, z));
&&&&&&&&public Vector3
InverseTransformPoint(Vector3 position)
&&&&&&&&&&&&return Transform.INTERNAL_CALL_InverseTransformPoint(this,ref position);
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&private
static extern Vector3
INTERNAL_CALL_InverseTransformPoint(Transform self,
ref Vector3 position);
&&&&&&&&public Vector3
InverseTransformPoint(float x,float y,
&&&&&&&&&&&&return
this.InverseTransformPoint(newVector3(x, y, z));
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&public
extern void
DetachChildren();
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&public
extern void
SetAsFirstSibling();
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&public
extern void
SetAsLastSibling();
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&public
extern void
SetSiblingIndex(int index);
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&public
extern int
GetSiblingIndex();
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&public
extern Transform Find(string name);
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&private
extern void
INTERNAL_get_lossyScale(out Vector3value);
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&public
extern bool
IsChildOf(Transform parent);
&&&&&&&&public Transform
FindChild(string name)
&&&&&&&&&&&&return
this.Find(name);
&&&&&&&&public IEnumerator
GetEnumerator()
&&&&&&&&&&&&return
new Transform.Enumerator(this);
&&&&&&&&[Obsolete(&use Transform.Rotate instead.&)]
&&&&&&&&public
void RotateAround(Vector3 axis,float angle)
&&&&&&&&&&&&Transform.INTERNAL_CALL_RotateAround(this,ref axis, angle);
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&private
static extern
void INTERNAL_CALL_RotateAround(Transform self,ref Vector3 axis,
float angle);
&&&&&&&&[Obsolete(&use Transform.Rotate instead.&)]
&&&&&&&&public
void RotateAroundLocal(Vector3 axis,float angle)
&&&&&&&&&&&&Transform.INTERNAL_CALL_RotateAroundLocal(this,ref axis, angle);
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&private
static extern
void INTERNAL_CALL_RotateAroundLocal(Transform self,ref Vector3 axis,
float angle);
&&&&&&&&[WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&public
extern Transform GetChild(int index);
&&&&&&&&[Obsolete(&use Transform.childCount instead.&), WrapperlessIcall]
&&&&&&&&[MethodImpl(MethodImplOptions.InternalCall)]
&&&&&&&&public
extern int
GetChildCount();
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:38079次
排名:千里之外
原创:41篇
评论:17条
(3)(1)(2)(1)(2)(1)(2)(4)(3)(2)(1)(2)(2)(5)(6)(1)(3)(1)(1)

我要回帖

更多关于 unity transform 的文章

 

随机推荐